Joh*_*ams 7 java orm hibernate transactions rollback
我读到的关于Hibernate的所有内容都表明你必须回滚事务并在发生错误时关闭会话,并且通常会给出以下代码的一些变体(取自Hibernate的文档)作为示例:
Session sess = factory.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
// do some work
...
tx.commit();
} catch (RuntimeException e) {
if (tx != null) tx.rollback();
throw e; // or display error message
} finally {
sess.close();
}
Run Code Online (Sandbox Code Playgroud)
出于几个原因,这种模式对我来说似乎很奇怪.首先,对于一个通常用于简化事物的框架来说,这似乎是不合理的复杂.更重要的是,如果try块中的代码抛出除了RuntimeException?之外的其他内容会发生什么?在这种情况下,Hibernate看起来好像必须能够用开放事务优雅地关闭会话,大概是通过回滚它,但如果这是真的,为什么还要打电话rollback呢?
Hibernate 可能使很多事情变得更简单,但是事务管理并不是很简单,因此对于每个事务,您必须非常仔细地考虑您想要什么。Hibernate 无法帮助您解决这个问题。
如果try块中的代码抛出 a 以外的任何内容RuntimeException,则您的事务显然不会提交。但是您也没有明确回滚。sess.Close您finally块中的调用也不会回滚事务。会发生什么取决于这是否是嵌套事务:
| 归档时间: |
|
| 查看次数: |
3043 次 |
| 最近记录: |