我最近一直在使用Hibernate 3.5和Spring 3做一些工作,但是我对Hibernate还是很陌生,并认为HibernateDaoSupport
Spring的类使在我的域类中使用Hibernate变得容易又好用。
但是,在搜索一个不相关的问题时,我看到有人提到,这HibernateDaoSupport
不是使用Spring和Hibernate的最佳方法。任何人都可以阐明以下几点:
- 为什么不推荐?
- 整合Hibernate和Spring的最佳方法(或至少是公认的方法)是什么?
Answers:
不建议使用HibernateDaoSupport
/,HibernateTemplate
因为它不必要地将您的代码与Spring类联系起来。
为了集成对Spring管理的事务的支持,在较早版本的Hibernate中不可避免地使用这些类。
但是,从Hibernate 3.0.1开始,您将不再需要它-您可以在使用Spring管理的事务时针对普通的Hibernate API编写代码。您需要做的就是配置Spring事务支持,在需要使用会话时注入SessionFactory
并调用getCurrentSession()
它。
HibernateTemplate
异常翻译的另一个好处是。如果没有HibernateTemplate
相同的功能,则可以通过使用@Repository
注释来实现,如Gareth Davis的答案所示。
也可以看看:
SessionFactory
您也可以使用Hibernate的JPA 2实现(注入一个EntityManager
起点)。
为了我的钱,使用没有问题HibernateDaoSupport
。在Spring 3.0中不推荐使用。
您能提供找到的问题编号吗,也许它们是指非常具体的用例。
替代方法是使用@Repository
注释。这将连接相同的异常翻译(的最大好处之一HibernateTemplate
),并允许您使用自己的超类或只是避免扩展第三方框架类。
@Repository
public class YourFooDao {
@Resource
private SessionFactory sessionFactory;
private Foo get(long id){
return (Foo) sessionFactory.getCurrentSession().get(id);
}
}
HibernateDaoSupport
和HibernateTemplate
,因为它们提供了比原始Hibernate Session
API更丰富的API。