4

考虑使用休眠 4 进入 Spring 3.2,应该如何在事务的上下文中获取当前会话?据我了解HibernateTransactionManager代码(实际上还有其他 TM)在开始它调用的事务时sessionFactory....openSession(),它不会在休眠端设置 currentSession 到这个会话,而只是返回一个新的。然后,将使用ThreadLocal 构造HibernateTransactionManager维护会话对象。TransactionSynchronizationManager现在,如果我想访问Session绑定到当前事务的内容,我只需调用SessionFactoryUtils.getSession()它会在内部检查TransactionSynchronizationManager现有会话。

现在,在 hibernate 4 中,我们没有这种方法,我们应该SessionFactory.getCurrentSession()按照 HibernateTemplate JavaDoc 使用:

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

好吧,如果我仍在使用HibernateTransactionManager,它使用它的 OWN 会话上下文,然后调用SessionFactory.getCurrentSession(),我将不会获得当前事务的 Session,因为我现在指的是 hibernate 的内部每个线程上下文,对吗?任何指针将不胜感激

编辑:基本上我正在尝试编写自己的 CurrentSessionContext 实现。以前我会简单地使用 SessionFactoryUtils.getSession(sf, true) ,这将返回每个线程当前绑定的会话。

4

0 回答 0