【问题标题】:When to use @Transactional's propagation=Proagation.REQUIRES_NEW?何时使用@Transactional 的propagation=Propagation.REQUIRES_NEW?
【发布时间】:2011-10-05 23:00:29
【问题描述】:

我的问题很简单,几乎已经在标题中说明:是否有特定的模式/用例会说应该使用 @Transactional(propagation=Proagation.REQUIRES_NEW) 而不是默认传播?

谢谢!

【问题讨论】:

    标签: java hibernate spring jakarta-ee


    【解决方案1】:

    编写审计跟踪。您想记录某人试图做某事的事实,而不管主事务是成功还是失败(因此被回滚)。

    【讨论】:

    • 这意味着内部事务总是被执行,即使外部事务不是?
    • @Erik,是的。顺便说一句,JTA(在后台使用)没有内部事务的概念。现有事务被挂起,并开始新事务。在新事务终止(提交或回滚)时,恢复现有事务。
    • 是的,它们是不同的,“嵌套”事务还有其他概念,其中嵌套事务依赖于外部事务。 EJB 不支持嵌套事务。
    【解决方案2】:

    特定用途包括您需要在方法中执行某些工作并在继续现有事务之前提交它的场景。

    例如,方法调用的“审计”(而不是记录)是一种您希望提交审计条目而不管现有业务事务最终将提交还是回滚的场景。

    另一种情况是,您有多个从外观调用的业务事务,并且每个此类调用都必须在将控制权返回给外观之前提交它的工作。这种情况非常罕见,但您可能会在创建自己的事务的工作流系统中发现这种情况(其中条目记录在工作流的进度中),并且对驻留在同一应用程序中的其他组件的调用必须发生在单独的事务中。

    【讨论】:

      猜你喜欢
      • 2013-03-23
      • 1970-01-01
      • 2017-11-18
      • 2020-06-23
      • 2011-01-24
      • 1970-01-01
      • 2013-02-13
      • 2019-07-12
      • 1970-01-01
      相关资源
      最近更新 更多