【发布时间】:2016-03-15 20:56:02
【问题描述】:
我使用的是 Hibernate4 但不是 Spring。在我正在开发的应用程序中,我想将每个添加、更新、删除的记录记录到单独的日志表中。就目前而言,我的代码按顺序执行两个事务,并且它可以工作,但我真的想将它们包装成一个事务。
我知道 Hibernate 不支持嵌套事务,只能与 Spring 框架结合使用。我读过有关保存点的信息,但它们并不完全相同。
【问题讨论】:
-
如果不涉及保存点,您对“嵌套事务”的定义是什么?是什么让您认为 Spring 能够以您自己无法使用的方式使用 Hibernate 事务?
-
@JBNizet。从我已经完成的阅读中,如果一个正在使用 Spring 事务,那么如果其中一个操作失败,另一个必须回滚
-
在 Spring(以及其他任何地方,因为这不是事务的工作方式)中没有这种类型的东西。 Spring 中存在的是简单的事务传播:如果从另一个事务方法调用一个事务方法,那么第二个方法不会启动事务:它在第一个的上下文中执行。但这也是 Hibernate 所做的:docs.jboss.org/hibernate/orm/5.1/javadocs/org/hibernate/…
-
第二个事务如何“在第一个事务的上下文中执行”?因为如果您已经启动了一个事务并且没有提交也没有回滚,那么您肯定会从 Hiberbate 收到一条错误消息,指出“不支持嵌套事务”?
-
不,你不会。我不明白你为什么会得到那个。 Spring 永远不会要求 Hibernate 启动嵌套事务。它将看到一个 transactin 已经启动,并且不会尝试启动另一个。与其猜测会发生什么,不如尝试一下,阅读 Spring 文档,如果遇到真正的问题,请使用代码提出具体问题?
标签: spring hibernate transactions nested