2010-11-08 9 views
13

मैं, एक हाइबरनेट डीएओ है हाइबरनेट एपीआई 3 और स्प्रिंग 3.x साथ अनुसार, मैं बस एक sessionFactory और प्रयोग में नहीं एक HibernateDaoSupport + getHibernateTemplate() - मुझे उम्मीद है कि यह एक अच्छा विकल्प है ... -स्प्रिंग + हाइबरनेट, Autowire sessionFactory हाइबरनेट डीएओ

अब मेरा लक्ष्य एनोटेशन का उपयोग करके मेरे डीएओ में sessionFactory को स्वचालित करना है।

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

मैं अपने सभी डीएओ और सेवा वर्ग के डेटा पैकेज के अंदर:

मेरी spring.xml में मैं इस किया है।

यह मेरा सरल 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(); 
} 
} 

मैं spring.xml लोड करने के दौरान कोई त्रुटि है, लेकिन अभी भी sessionFactorynull हो।

मुझे क्या करना है?

संपादित

यह spring.xml में मेरी sessionFactory घोषणा है:

<?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 अब sessionFactory अशक्त नहीं है, लेकिन मैं अपवाद का एक और प्रकार है:

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

शायद इसका मतलब है कि यह PersonHDAO बीन नहीं मिल सकता है?

धन्यवाद सब कुछ।

उत्तर

11

क्या आपने सत्र फैक्ट्री बीन घोषित किया था?

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

@Maurizio Cucchiara @Autowired है: यकीन है, मैं कुछ अधिक infos के साथ मेरी पहली पोस्ट को संपादित। – blow

+0

यह एक वेब अनुप्रयोग है? क्या आपने अपने web.xml के अंदर org.springframework.web.context.ContextLoaderListener घोषित किया था? –

+0

@Maurizio Cucchiara: नहीं यह एक डेस्कटॉप एप्लीकेशन है मेरे पास web.xml फ़ाइल नहीं है। – blow

3

मुझे लगता है कि तुम्हारी समस्या

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

public void setSessionFactory(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 
संबंधित मुद्दे