为什么不推荐HibernateDaoSupport?
最近我一直在用Hibernate 3.5和Spring 3做一些工作,我对Hibernate还比较陌生,我认为Spring中的为什么不推荐HibernateDaoSupport?,hibernate,spring,Hibernate,Spring,最近我一直在用Hibernate 3.5和Spring 3做一些工作,我对Hibernate还比较陌生,我认为Spring中的HibernateDaoSupport类使Hibernate与我的域类一起使用非常方便 然而,在搜索一个不相关的问题时,我看到有人提到HibernateDaoSupport不是使用Spring和Hibernate的最佳方式。有谁能解释一下: 为什么不推荐呢 集成Hibernate和Spring的最佳(或至少是公认的)方法是什么 用我的钱来说,使用HibernateDao
HibernateDaoSupport
类使Hibernate与我的域类一起使用非常方便
然而,在搜索一个不相关的问题时,我看到有人提到HibernateDaoSupport
不是使用Spring和Hibernate的最佳方式。有谁能解释一下:
- 为什么不推荐呢
- 集成Hibernate和Spring的最佳(或至少是公认的)方法是什么
HibernateDaoSupport
没有什么错。它在Spring3.0中没有被弃用
你能提供你找到的问题编号吗?也许他们指的是一个非常具体的用例
另一种方法是使用@Repository
注释。这将连接到相同的异常转换(HibernateTemplate的最大好处之一)中,并允许您使用自己的超类,或者只是为了避免扩展第三方框架类
@Repository
public class YourFooDao {
@Resource
private SessionFactory sessionFactory;
private Foo get(long id){
return (Foo) sessionFactory.getCurrentSession().get(id);
}
}
不建议使用
HibernateDaoSupport
/HibernateTemplate
,因为这是不必要的
将代码绑定到Spring类
为了集成对Spring管理事务的支持,在较旧版本的Hibernate中使用这些类是不可避免的
然而,由于Hibernate 3.0.1,您不再需要它了——您可以在使用Spring管理的事务时针对普通的Hibernate API编写代码。您只需配置Spring事务支持,在需要使用会话时,插入SessionFactory
并调用getCurrentSession()
HibernateTemplate
的另一个好处是异常转换。如果没有HibernateTemplate
,同样的功能可以通过使用@Repository
注释来实现,如Gareth Davis的回答所示
另请参见:
HibernateDaoSupport
和HibernateTemplate
,因为它们提供了比原始Hibernate会话更丰富的API。感谢@Repository注释的提示,我一定会在文档中找到更多关于它的信息。我找不到我第一次看到这一点的线程,对不起。@skaffman如果Hibernate有一个坏的API,那么可能不应该使用Hibernate(我只使用它作为JPA提供程序)@Sean:我没有说它是一个坏的API。只是Spring的情况稍微好一点。谢谢你的意见。谢谢你给Spring doc的链接,事实上这很清楚。我将把你的帖子标记为答案,因为它回答了我的主要问题,谢谢。除了SessionFactory
之外,你还可以使用Hibernate的JPA 2实现(注入EntityManager
作为起点)。需要注意的是,Spring已经从Hibernate 4包中删除了HibernateAOSupport/HibernateTemplate。因此,如果您现在使用这些类,那么当您升级到Hibernate4时,您将需要进行一些重构。