使用Spring和Hibernate实现嵌套事务

6

在我的应用程序中,有多个步骤需要通过多个方法依次对数据库进行多次提交。

例如:

A -> B -> C
       -> D
           ->E
       -> F
  -> G

A调用B,B调用C。然后B调用D。D调用E等等。所有这些方法都涉及一些数据库操作。 从 PROPAGATION_REQUIRED(声明式事务管理 - spring推荐的方式)中我了解到,如果 E 成功完成,则事务(以及 E 中的操作)将被提交。现在,由于某些异常,F 应该导致回滚。我希望从 A 开始,所有 操作都可以回滚。 通过声明式事务管理,是否可能实现此目的?或者我应该使用编程式事务管理?
谢谢。
1个回答

7

首先,据我所知,“嵌套”事务,也就是多个相互依赖的运行事务,不受支持。

propagation=REQUIRED意味着所有使用该传播机制的方法将会:

  • 如果不存在任何事务,则开始一个新事务
  • 如果存在事务,则参与该事务。

这意味着在您的场景中,如果F发生故障,整个事务都将回滚(因为它是由A启动并传播到其他方法的单个事务)。


直到我读到(某个地方 - 我找不到它在哪里)提交发生在方法完成后,我才完全同意您的观点。我认为我在这里的理解是错误的。实际提交是什么时候发生的(我们不必显式执行它。对吗?)? - TJ-
1
提交发生在启动事务的方法完成时。在这种情况下,它是A - Bozho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接