使用Annotation整合Spring2.5和Hibernate3.3,在使用HibernateDaoSupport的时候我希望采用Annotation的方式,但是setSessionFactory被标记为final,那继承HibernateDaoSupport后就不能重写setSessionFactory方法来实现使用Annotation的注入, 解决方法如下:
@Resource(name="sessionFactory") public void setBaseDaoSessionFactory(SessionFactory sessionFactory) { super.setSessionFactory(sessionFactory); }
如果采用hibernate4的话, 会遇到java.lang.NoSuchMethodError
主要原因就是hibernate4已经提供了很好的机制,所以不需要再继承HibernateDaoSupport类了。那怎么办呢?不就是为了获取到Session么,我们直接在UserDAOImpl.java类中添加一个SessionFactory属性,再添上它的setter方法。
@Autowired private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } protected Session getSession(){ return sessionFactory.openSession(); }
注意这里不要用getCurrentSession(),不然还是有异常。直接用openSession() //这样好像又不对,hibernate 4.1中又必须调用
getCurrentSession, 不然不在一个session里