【发布时间】:2013-10-16 06:26:45
【问题描述】:
我目前正在阅读 Hibernate 文档,并且遇到了以下引用:
如果 Session 抛出异常,包括任何 SQLException,立即回滚数据库事务,调用 Session.close() 并丢弃 Session 实例。 Session 的某些方法不会使会话保持一致状态。 Hibernate 抛出的任何异常都不能被视为可恢复的。通过在 finally 块中调用 close() 确保 Session 将被关闭。
就我而言,这一切都是有道理的,但它确实让我想知道关闭会话对既不提交也不回滚的事务有什么影响?
例如考虑以下几点:
session = getSessionFactory().openSession();
session.beginTransaction();
session.save(carObject);
//session.getTransaction().commit();
session.close();
注释掉提交,并且这里没有调用回滚,session.close() 的预期行为是什么?它是否只是自动回滚该提交,是否留下“挂起”事务?等等
(我知道这显然不是一个好习惯 - 我只是想进一步了解基本概念。)
【问题讨论】:
-
+1 在我看来应该放弃...但是看到正确的答案总是好的:-)
-
我希望这与“当池化 JDBC 连接返回未完成事务时会发生什么”非常相似。 mchange.com/projects/c3p0/#configuring_unresolved
-
来自 JPA 的 JavaDoc 很有趣 - docs.oracle.com/javaee/6/api/javax/persistence/…
-
与 Hibernate 的 JavaDoc 相关,Hibernate 似乎将释放连接,这归结为“JDBC 连接会发生什么?”问题。 docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/…
-
我找到了另一个stackoverflow topic about this。
标签: java hibernate session transactions