为什么不build议使用HibernateDaoSupport?
我最近在Hibernate 3.5和Spring 3上做了一些工作,对于Hibernate来说我是相当新的,并且认为Spring中的HibernateDaoSupport
类使得Hibernate和我的领域类很好很容易使用。
然而,在search一个不相关的问题时,我看到有人提到HibernateDaoSupport
不是使用Spring和Hibernate的最佳方法。 任何人都可以阐明:
- 为什么不推荐?
- 什么是最好的(或至less被接受)的方式来整合Hibernate和Spring?
不推荐使用HibernateDaoSupport
/ HibernateTemplate
因为它不必要地将代码绑定到Spring类。
为了集成对Springpipe理事务的支持,使用这些类对于旧版本的Hibernate来说是不可避免的。
但是,从Hibernate 3.0.1开始,你不再需要它了 – 你可以使用Springpipe理的事务来写一个简单的Hibernate API代码。 您只需要configurationSpring事务支持,当需要使用会话时,注入SessionFactory
并调用getCurrentSession()
。
HibernateTemplate
另一个好处是exception转换。 如果没有HibernateTemplate
,可以通过使用@Repository
注释来实现相同的function,如Gareth Davis的答案所示。
也可以看看:
- 13.3.2基于纯Hibernate 3 API实现DAO
对于我的钱来说,使用HibernateDaoSupport
没有任何问题。 3.0spring不推荐使用。
你能提供你find的问题号码,也许他们提到一个非常具体的用例。
另一种方法是使用@Repository
注释。 这将连接到相同的exception转换( HibernateTemplate
一大优点),并允许您使用自己的超类,或者仅仅是为了避免扩展第三方框架类。
@Repository public class YourFooDao { @Resource private SessionFactory sessionFactory; private Foo get(long id){ return (Foo) sessionFactory.getCurrentSession().get(id); } }