【问题标题】:Nested Transaction using Spring and Hibernate使用 Spring 和 Hibernate 的嵌套事务
【发布时间】:2011-11-01 15:26:51
【问题描述】:

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

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

A 调用 B,B 调用 C。然后 B 调用 D。D 调用 E,依此类推。所有这些方法都有一些数据库操作。 据我了解PROPAGATION_REQUIRED(声明式事务管理 - spring 推荐的方式),如果 E 成功完成,则事务(以及 E 中的操作将被提交)。现在,由于某些异常,F 应该会导致回滚。我希望从 A 所做的事情开始回滚一切。 这可以通过声明性事务管理实现吗?还是应该使用程序化事务管理?

谢谢。

【问题讨论】:

    标签: java hibernate spring transactions


    【解决方案1】:

    首先,不支持“嵌套”事务,即存在多个相互依赖的正在运行的事务,afaik。

    那么,propagation=REQUIRED 意味着具有该传播的所有方法都将:

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

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

    【讨论】:

    • 我会完全同意你的看法,直到我读到(在某个地方 - 无法找到它的位置),一旦方法完成,提交就会发生。我想我在这里的理解是错误的。实际提交何时发生(我们不必明确地这样做。对吗?)?
    • 提交发生在启动事务的方法完成时。在这种情况下是A
    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2015-11-04
    • 2019-07-12
    • 2016-09-10
    • 2012-10-20
    • 2023-04-03
    • 2011-06-13
    相关资源
    最近更新 更多