Estoy haciendo spring + hibernate apllication. Cuando ejecuto la aplicación en el servidor tomcat estoy recibiendo algunos excepción. A continuación es mi código.

Este es mi bean archivo de configuración.

<?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.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>WEB-INF/database/db.properties</value>
    </property>
</bean>
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

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

        <property name="dataSource">
            <ref bean="dataSource" />
        </property> 
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>
                <value>Employee.hbm.xml</value>
            </list>
        </property>
    </bean>
    <bean id="employeeBo" class="com.saggezza.employee.bo.impl.EmployeeBoImpl">
        <property name="employeeDao" ref="employeeDao" />
    </bean>

    <bean id="employeeDao" class="com.saggezza.employee.dao.impl.EmployeeDaoImpl">
        <constructor-arg ref="sessionFactory"></constructor-arg>
    </bean>

este es mi dao clase.

public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao {

    private SessionFactory sessionFactory;
    public EmployeeDaoImpl(SessionFactory sessionfactory){
        this.sessionFactory=sessionfactory;
    }

    @Override
    public List<Employee> getEmployeeDetails() {
        return getHibernateTemplate().find("from Employee");

    }
}

Aquí otra clase employeeBo está llamando a la employeeDaoImpl.
cuando ejecuto thisI estoy haciendo la siguiente excepción.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeBo' defined in ServletContext resource [/WEB-INF/spring/EmployeeBean.xml]: Cannot resolve reference to bean 'employeeDao' while setting bean property 'employeeDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeDao' defined in ServletContext resource [/WEB-INF/spring/EmployeeBean.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required

¿Alguien puede ayudar a resolver esto. He probado un montón y google.Pero, ¿de obtener la solución.

OriginalEl autor cherry | 2013-02-23

3 Comentarios

  1. 3

    Si usted tiene dos archivos de configuración, usted duplicados «sessionFactory» definición. Quitar uno de los «sessionFactory» definiciones . Usted tendría duplicado bean definición de excepción antes de que el IllegalArgumentException.

    Edit: Después de tu comentario,

    public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao {
    
    
    public EmployeeDaoImpl(SessionFactory sessionfactory){
        setSessionFactory(sessionfactory);
    }
    
    @Override
    public List<Employee> getEmployeeDetails() {
        return getHibernateTemplate().find("from Employee");
    
    }
    }

    o deshacerse de constructor en el código de arriba y de inyectar ‘sessionFactory» utilizando el setter de la inyección.Ver org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(SessionFactory). Yo prefiero un enfoque más tarde.

    He borrado el duplicado, pero sigue consiguiendo que la excepción. Y los actualiza a la pregunta así.
    actualizado mi respuesta después de comentar
    se puede poner la importación declaración de la SessoinFactory clase?
    import org.hibernate.SessionFactory;
    es su Employee.hbm.xml situado en WEB-INF/ carpeta?

    OriginalEl autor Adi

  2. 0

    Creo que el problema es el tipo de SessionFactory que se inyecta en EmployeeDaoImpl no coincide con el tipo de la SessionFactory se utilizan en la clase.

    Puede usted comprobar?

    estoy usando org.hibernate.SessionFactoy en el dao de la clase

    OriginalEl autor Sazzadur Rahaman

  3. 0

    Esta es una vieja cuestión, de manera que debe ser resuelto ahora, pero si alguien viene a través de este problema. La siguiente es la solución.

    Usted puede usar el modo de Hibernación DAO Apoyo mediante la ampliación de HibernateDAOSupport clase y principal de su afterPropertiesSet() método.

    Se llama a este método en HibernateDAO apoyo y en ese tiempo ya sessionFactory es null es tirar este error. En la clase personalizada esta propiedad se puede establecer de forma explícita y, a continuación, llama al mismo método de la Clase Padre (es decir, HibernateDAOSupport del addProperties() método)

    package com.techcielo.spring4.hibernate.template;
    
    import org.hibernate.SessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.orm.hibernate3.HibernateTemplate;
    import org.springframework.stereotype.Component;
    
    @Component("hibernateTemplate")
    public class Hibernate4CustomTemplate extends HibernateTemplate{
    
        @Autowired(required=true)
        private SessionFactory sessionFactory;
        public void setSessionFactory(SessionFactory sessionFactory) {
            System.out.println("Setting SessionFactory");
            this.sessionFactory = sessionFactory;
            super.setSessionFactory(sessionFactory);
        }
    
        @Override
        public void afterPropertiesSet() {
        System.out.println("Checking if properties set..."+this.sessionFactory);
        setSessionFactory(sessionFactory);
        super.afterPropertiesSet();
        }
    }

    Siguiente puede ser utilizado para la muestra!

    OriginalEl autor Keyur

Dejar respuesta

Please enter your comment!
Please enter your name here