为什么不建议使用HibernateDaoSupport?

时间:2011-02-24 12:37:24

标签: hibernate spring

我最近在使用Hibernate 3.5和Spring 3做了一些工作,我对Hibernate很新,并且认为Spring中的HibernateDaoSupport类使得Hibernate很好用并且很容易使用我的域类。 / p>

然而,在搜索一个不相关的问题时,我看到有人提到HibernateDaoSupport不是使用Spring和Hibernate的最佳方式。任何人都可以阐明:

  • 为什么不推荐?
  • 将Hibernate和Spring集成的最佳(或至少是被接受的)方式是什么?

2 个答案:

答案 0 :(得分:90)

不建议使用HibernateDaoSupport / HibernateTemplate,因为它不必要 将您的代码绑定到Spring类。

对于旧版本的Hibernate,使用这些类是不可避免的,以便集成对Spring管理的事务的支持。

然而,由于Hibernate 3.0.1你不再需要它 - 你可以在使用Spring管理的事务时针对普通的Hibernate API编写代码。您只需配置Spring事务支持,在需要使用会话时注入SessionFactory并在其上调用getCurrentSession()

HibernateTemplate的另一个好处是异常翻译。如果没有HibernateTemplate,可以使用@Repository注释来实现相同的功能,如Gareth Davis的回答所示。

另见:

答案 1 :(得分:18)

对于我的钱,使用HibernateDaoSupport没有任何问题。它在春季3.0中不被弃用。

您能否提供您找到的问题编号,也许他们可以参考一个非常具体的用例。

另一种方法是使用@Repository注释。这将连接相同的异常转换(HibernateTemplate的一大好处)并允许您使用自己的超类或仅仅是为了避免扩展第三方框架类。

@Repository
public class YourFooDao {

    @Resource
    private SessionFactory sessionFactory;

    private Foo get(long id){
        return (Foo) sessionFactory.getCurrentSession().get(id);
    }
}