使用Spring和Hibernate的嵌套事务

时间:2011-08-23 04:22:28

标签: java hibernate spring transactions

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

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

呼叫B的呼叫B然后B呼叫D.D呼叫E,依此类推。所有这些方法都有一些数据库操作。 据我所知PROPAGATION_REQUIRED(声明式交易管理 - 春季推荐方式),如果 E 成功完成,交易(以及 E 中的操作将被提交) 。现在,由于一些例外, F 应该导致回滚。我想从 A 开始回滚所有回滚。 这可以通过声明式事务管理吗?或者我应该使用程序化事务管理?

谢谢。

1 个答案:

答案 0 :(得分:7)

首先,不支持“嵌套”事务,因为有多个运行事务依赖于彼此,afaik。

然后,propagation=REQUIRED表示具有该传播的所有方法都将:

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

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