3

I am learning spring with hibernate integration.I am getting this exception

Exception in thread "main" java.lang.NullPointerException
Sep 04, 2014 7:06:50 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4577357d: startup date [Thu Sep 04 19:06:50 IST 2014]; root of context hierarchy
Sep 04, 2014 7:06:50 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [app-context.xml]
Sep 04, 2014 7:06:51 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@30583b71: defining beans [dataSource,mysessionFactory,hibernateTemplate,employeeDAO]; root of factory hierarchy
.19:06:52.016 [main] INFO  org.hibernate.cfg.Environment - Hibernate 3.3.0.SP1 
.19:06:52.023 [main] INFO  org.hibernate.cfg.Environment - hibernate.properties not found 
.19:06:52.027 [main] INFO  org.hibernate.cfg.Environment - Bytecode provider name : javassist 
.19:06:52.032 [main] INFO  org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling 
.19:06:52.246 [main] INFO  org.hibernate.cfg.HbmBinder - Mapping class: com.bean.Employee -> EMP1 
Sep 04, 2014 7:06:52 PM org.springframework.orm.hibernate3.LocalSessionFactoryBean buildSessionFactory
INFO: Building new Hibernate SessionFactory
.19:06:52.320 [main] INFO  o.h.c.ConnectionProviderFactory - Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider 
.19:06:54.660 [main] INFO  org.hibernate.cfg.SettingsFactory - RDBMS: Oracle, version: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production 
.19:06:54.660 [main] INFO  org.hibernate.cfg.SettingsFactory - JDBC driver: Oracle JDBC driver, version: 10.2.0.1.0XE 
.19:06:54.681 [main] INFO  org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.Oracle9Dialect 
.19:06:54.683 [main] WARN  org.hibernate.dialect.Oracle9Dialect - The Oracle9Dialect dialect has been deprecated; use either Oracle9iDialect or Oracle10gDialect instead 
.19:06:54.686 [main] INFO  o.h.t.TransactionFactoryFactory - Transaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory 
.19:06:54.688 [main] INFO  o.h.t.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended) 
.19:06:54.688 [main] INFO  org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled 
.19:06:54.688 [main] INFO  org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled 
.19:06:54.688 [main] INFO  org.hibernate.cfg.SettingsFactory - JDBC batch size: 15 
.19:06:54.688 [main] INFO  org.hibernate.cfg.SettingsFactory - JDBC batch updates for versioned data: disabled 
.19:06:54.689 [main] INFO  org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled 
.19:06:54.689 [main] INFO  org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): disabled 
.19:06:54.689 [main] INFO  org.hibernate.cfg.SettingsFactory - Connection release mode: auto 
.19:06:54.690 [main] INFO  org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1 
.19:06:54.690 [main] INFO  org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled 
.19:06:54.690 [main] INFO  org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled 
.19:06:54.690 [main] INFO  org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled 
.19:06:54.690 [main] INFO  org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory 
.19:06:54.692 [main] INFO  o.h.h.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory 
.19:06:54.692 [main] INFO  org.hibernate.cfg.SettingsFactory - Query language substitutions: {} 
.19:06:54.693 [main] INFO  org.hibernate.cfg.SettingsFactory - JPA-QL strict compliance: disabled 
.19:06:54.693 [main] INFO  org.hibernate.cfg.SettingsFactory - Second-level cache: enabled 
.19:06:54.693 [main] INFO  org.hibernate.cfg.SettingsFactory - Query cache: disabled 
.19:06:54.693 [main] INFO  org.hibernate.cfg.SettingsFactory - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory 
.19:06:54.693 [main] INFO  org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled 
.19:06:54.693 [main] INFO  org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled 
.19:06:54.699 [main] INFO  org.hibernate.cfg.SettingsFactory - Echoing all SQL to stdout 
.19:06:54.700 [main] INFO  org.hibernate.cfg.SettingsFactory - Statistics: disabled 
.19:06:54.700 [main] INFO  org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled 
.19:06:54.700 [main] INFO  org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo 
.19:06:54.700 [main] INFO  org.hibernate.cfg.SettingsFactory - Named query checking : enabled 
.19:06:54.771 [main] INFO  o.hibernate.impl.SessionFactoryImpl - building session factory 
.19:06:55.035 [main] INFO  o.h.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured 
1
rajeev
Exception in thread "main" java.lang.NullPointerException
    at com.bean.EmployeeDAO.saveEmployee(EmployeeDAO.java:15)
    at com.bean.Test.main(Test.java:13)

I am unable to find the mistake,can anyone help me.Below is my code

I have created database table like this

CREATE TABLE  EMP1   
(    
    ID NUMBER(10,0) NOT NULL PRIMARY KEY,   
    NAME VARCHAR2(10)   
);

app-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" id="dataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
        <property name="username" value="test"></property>
        <property name="password" value="test"></property>
    </bean>

    <bean class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
        id="mysessionFactory">

        <property name="dataSource" ref="dataSource"></property>
        <property name="mappingResources">
            <list>
                <value>Employee.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

    <bean class="org.springframework.orm.hibernate3.HibernateTemplate"
        id="hibernateTemplate">
        <property name="sessionFactory" ref="mysessionFactory"></property>
    </bean>

    <bean class="com.bean.EmployeeDAO" id="employeeDAO">
        <property name="hibernateTemplate" ref="hibernateTemplate"></property>
    </bean>
</beans>

EmployeeDAO.java

package com.bean;

import org.springframework.orm.hibernate3.HibernateTemplate;

public class EmployeeDAO {
    HibernateTemplate hibernateTemplate;

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
    }

    public void saveEmployee(Employee employee){
        System.out.println(employee.getId());
        System.out.println(employee.getName());
        hibernateTemplate.save(employee);
    }

    public void updateEmployee(Employee employee){
        hibernateTemplate.update(employee);
    }
}

Employee.java

package com.bean;

public class Employee {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Employee.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Sep 3, 2014 9:01:05 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="com.bean.Employee" table="EMP1">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
    </class>
</hibernate-mapping>

Test.java

package com.bean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("app-context.xml");
        Employee employee=new Employee();
        employee.setName("rajeev");
        employee.setId(1);
        EmployeeDAO employeeDAO=new EmployeeDAO();
        employeeDAO.saveEmployee(employee);
    }
}

this is github link [email protected]:mcarajeev/spring-with-hibernate1.git

3
  • Please post the stacktrace Commented Sep 4, 2014 at 14:03
  • 6
    You are not using the dao that is configured in spring you aer creating a new one. retrieve the dao from the context. Commented Sep 4, 2014 at 14:06
  • possible duplicate of Spring Dependency Injection Autowiring Null Commented Sep 4, 2014 at 14:14

1 Answer 1

1

If you create EmployeeDAO employeeDAO=new EmployeeDAO(); in this way the attribute HibernateTemplate is null.

try to change

EmployeeDAO employeeDAO=new EmployeeDAO();

in

EmployeeDAO employeeDAO= (EmployeeDAO) context.getBean("employeeDAO");

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.