什么时候JPA REQUIRES_NEW事务提交确实

时间:2014-03-12 10:27:36

标签: java spring hibernate java-ee jpa

在弹簧容器中,使用以下代码:

public class A {

    @Transactional
    public void m1() {
        ...
        b.m2(); // call in a new transaction
        ...
    }

}

public class B {

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void m2() {
        ...
    }

}

何时提交了为m2()创建的事务? m2()调用何时结束,或m1()调用何时结束?

When does @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) commit?为EJB回答它,但它似乎与JPA的行为不一样。

我调试了它,我只能在m2()结束后看到m1()对数据库的影响,但这对我来说很奇怪,我在这里遗漏了什么?

更新

我将我在m1()中检索到的实体传递给m2()并从那里更新。 所以,实际合并m2()中的实体解决了这个问题, Mik378 答案是正确的。

1 个答案:

答案 0 :(得分:6)

来自here

  

无论您是使用Spring Framework还是EJB,都要使用   REQUIRES_NEW事务属性可能会产生负面结果并导致   腐败和不一致的数据   REQUIRES_NEW交易   属性始终在方法启动时启动新事务,   是否存在现有交易。

即使上下文中存在现有事务,

REQUIRES_NEW也会启动新事务。

所以简短的回答是:一旦m2()调用结束

相关问题