HibernateCallback和getCurrentSession的区别

时间:2011-07-13 10:30:19

标签: hibernate spring

我可以使用geCurrentSession()而不是使用HibernateCallback来获取会话吗?如果两个会话都由Spring管理,为什么我需要回调?这有与之相关的性能优势吗?

1 个答案:

答案 0 :(得分:2)

在配置良好的Spring应用程序中,两者都是等效的,除非在一种情况下:当没有当前的事务上下文时。在这种情况下,getCurrentSession()将无法工作,而使用HibernateCallback将为您打开一个会话和一个Hibernate事务,并在最后关闭它们。

请注意,the documentation of HibernateTemplate提到应优先选择getCurrentSession():

  

注意:从Hibernate 3.0.1开始,事务性Hibernate访问代码可以   也可以用简单的Hibernate风格编码。因此,对于新开始   项目,考虑采用标准的Hibernate3编码风格   数据访问对象,而不是基于   SessionFactory.getCurrentSession()。

它还说:

  

请注意,HibernateTemplate将执行自己的会话管理,   除非参与自定义的Hibernate CurrentSessionContext   你明确地将“allowCreate”切换为“false”。

因此,混合两种做法并不是一个好主意。

我的首选是避免使用HibernateTemplate,直接使用Hibernate Session API,并使用Spring管理的声明式事务。