Spring注解方式,异常 'sessionFactory' or 'hibernateTemplate' is required的解决方

2012-03-27 19:47 Spring注解方式,异常 'sessionFactory' or 'hibernateTemplate' is required的解决方法 Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.checkDaoConfig(HibernateDaoSupport.java:118)
at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
... 26 more

以前写配置文件时,sessionFactory需要单独配置,现在全注解方式,如何设置sessionFactory呢?

项目中所有Dao实现类都继承了HibernateDaoSupport
根据提示是没有'sessionFactory' 或者'hibernateTemplate',但是通过下面代码给他注解了还是报同样的错误:

@Resource

private org.hibernate.SessionFactory sessionFactory;

结果查看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);
}

你可能感兴趣的:(Spring注解方式,异常 'sessionFactory' or 'hibernateTemplate' is required的解决方)