【发布时间】:2011-04-17 09:54:45
【问题描述】:
我正在使用 hibernate 和 jsp/servlet 编写一个基于 Web 的应用程序。我已经阅读了sessionFactory.getCurrentSession 和sessionFactory.openSession 方法。我知道它们之间的基本区别(使用getCurrentSession 您不必关闭连接,并且当您提交事务时,您的会话将自动关闭)。根据我的理解,我们应该选择 getCurrentSession 并通过 session-per-request 来完成。
让我们考虑以下场景:
- 方法 A 调用
getCurrentSession并获得当前会话
- 在方法 A 中,使用步骤 1 中的会话启动事务
- 方法 A 调用方法 B,该方法也有
getCurrentSession并启动事务
- 方法 B 提交其事务
- 控制权返回到方法 A,它也提交事务
现在我的问题是
- 在第 1 步和第 3 步中找到的会话会是同一个会话吗?
- 如果问题 1 的答案是肯定的,那么它将如何处理步骤 4 中的提交?理想情况下,它应该自行关闭会话并在第 5 步抛出异常。
- 如果问题 1 的答案是否定的,那么您如何处理这种情况?
【问题讨论】: