一尘不染

使用Spring和Hibernate的嵌套事务

hibernate

在我的应用程序中,有多个步骤,其中将通过多种方法对数据库进行多次提交。例:

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

A呼叫B,再呼叫C。然后B呼叫D。D呼叫E,依此类推。所有这些方法都有一些数据库操作。据我了解PROPAGATION_REQUIRED(声明式事务管理-
春天推荐的方式),如果 E* 成功完成,则事务(以及 E中的 操作将被提交)。现在,由于某些例外, F 应该导致回滚。我想 从
A 做起的 所有事情都 回滚。是否可以通过声明式事务管理?还是应该使用程序化交易管理?
*

谢谢。


阅读 250

收藏
2020-06-20

共1个答案

一尘不染

首先,从某种意义上说,不支持“嵌套”事务,即afaik。

然后,propagation=REQUIRED意味着所有具有该传播的方法将:

  • 如果不存在,则开始新交易
  • 参与现有交易(如果存在)。

这意味着在您的方案中,失败F将回滚整个事务(因为它是单个事务,由A发起,并传播到其他方法)

2020-06-20