为什么不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); } }