'sessionFactory' or 'hibernateTemplate' is required解決方法


這種情況就是在通過spring配置hibernate4的時候(注意,這里是hibernate4不是hibernate3,hibernate3的),使用的是HibernateDaoSupport的這種方式:

public class BaseDao extends HibernateDaoSupport{

*****

}

類似這種方式,然后在applicationContext.xml配置為:

***

<!-- 配置 SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties" ref="hibernate-hibernateProperties"></property>
<property name="packagesToScan" ref="hibernate-packagesToScan"></property>
<property name="mappingLocations" ref="hibernate-mappingLocations"></property>
</bean>

<bean id="baseDao" class="com.myprj.auth.dao.BaseDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

結果一運行會報:

'sessionFactory' or 'hibernateTemplate' is required 這種錯誤

結果查看HibernateDaoSupport的源代碼得知:setSessionFactory方法是:

public final void setSessionFactory(SessionFactory sessionFactory) {
  if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
   this.hibernateTemplate = createHibernateTemplate(sessionFactory);
  }
 }

說明在子類中想通注解設置 sessionFactory (重寫setter方法是不行的),那么怎么辦,我們只能通過super.setSessionFactory ()調用

解決辦法:

@Resource(name="sessionFactory")

private void setMySessionFactory(SessionFactory sessionFactory){

  //這個方法名可以隨便寫,@Resource可以通過name 或者type來裝載的。
  super.setSessionFactory(sessionFactory);
 }

 

所以最終可以發現在applicationContext.xml配置文件中的這個bean:

<bean id="baseDao" class="com.myprj.auth.dao.BaseDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

是沒用的

但是,注意,這里是hibernate4不是hibernate3,hibernate3是可以這樣配置的,在使用hibernate3的spring sessionFactory中可以通過在applicationContext.xml文件中:

<bean id="baseDao" class="com.myprj.auth.dao.BaseDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

然后直接寫:

public class BaseDao extends HibernateDaoSupport{

*****

}就可以


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM