我最近在使用Hibernate 3.5和Spring 3做了一些工作,我对Hibernate很新,并且认为Spring中的HibernateDaoSupport
类使得Hibernate很好用并且很容易使用我的域类。 / p>
然而,在搜索一个不相关的问题时,我看到有人提到HibernateDaoSupport
不是使用Spring和Hibernate的最佳方式。任何人都可以阐明:
答案 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);
}
}