2010-11-08 18 views
13

tengo una Hibernate DAO, en acuerdo con Hibernate API 3 y primavera 3.x, utilizo simplemente una sessionFactory y hibernación NO un HibernateDaoSupport + getHibernateTemplate() - Espero que esta es una buena opción ... -Primavera + Hibernate, Autowire sessionFactory en DAO

Ahora mi objetivo es autoarrancar sessionFactory en mi DAO usando anotaciones.

En mi spring.xml tengo esto:

<context:component-scan base-package="data" /> 

Dentro del paquete de datos que tengo todos mis DAO y el servicio de las Clases.

Esta sencilla mi HibernateDao:

@Repository 
public class PersonHDAO implements PersonDAO { 

private SessionFactory sessionFactory; 

@Autowired 
public void setSessionFactory(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 

public List<Person> findAll(){ 
    return sessionFactory.getCurrentSession().createQuery("bla bla").list(); 
} 
} 

tengo ningún error durante spring.xml carga, pero aún así ser sessionFactorynull.

¿Qué tengo que hacer?

EDITAR

Esta es mi declaración sessionFactory en spring.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" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 

     xsi:schemaLocation= 
     "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <!-- <property name="driverClassName" value="org.h2.Driver" /> --> 
     <property name="url" value="my/db/url" /> 
     <property name="username" value="myUsername" /> 
     <property name="password" value="myPassword" /> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="data" /> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
       <prop key="hibernate.current_session_context_class">thread</prop> 
       <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
      </props> 
     </property> 
    </bean> 

    <context:component-scan base-package="data" /> 

    <tx:annotation-driven/> 

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

</beans> 

Edit2 Ahora sessionFactory no es nulo, pero tengo otro tipo de excepción:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [data.PersonHDAO] is defined: expected single bean but found 0: 

¿Quizás significa que no puede encontrar PersonHDAO bean?

Gracias a todos.

Respuesta

11

¿Ha declarado sessionFactory bean?

<bean id="sessionFactory" 
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<property name="configLocation"> 
<value>file:src/hibernate.cfg.xml</value> 
</property> 
</bean> 
+0

@Maurizio Cucchiara: Seguro, puedo editar mi primer post con algunos más infos. – blow

+0

¿Es una aplicación web? ¿Declaraste org.springframework.web.context.ContextLoaderListener dentro de tu web.xml? –

+0

@Maurizio Cucchiara: no, es una aplicación de escritorio, no tengo un archivo web.xml. – blow

3

Creo que su problema se @Autowired

@Autowired 
private SessionFactory sessionFactory; 
2
@Autowired 
private SessionFactory sessionFactory; 

public void setSessionFactory(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 
Cuestiones relacionadas