异常后JPA实体不会被持久化

时间:2010-07-21 14:25:18

标签: java spring jpa

我遇到以下问题:

我有2个班级(A和B)。类A有一个用@Transaction(noRollBackFor = ExceptionB.class)注释的方法(method1),它从类B调用method2。ExceptionB是一个未经检查的RunTimeException。

public class A {
    ...

    @Resource
    private B b;

    @Transaction(noRollBackFor = ExceptionB.class)
    public void method1() {

      try {
            b.method2();
      } catch (ExceptionB e) {
            // Change objects annotated with @Entity (must be persisted)
            throw e;
      }

    }
}

@Transaction
public class B {
    ...

    public void method2() {
            ...
            throw new ExceptionB();
    }
}

但是,当B类抛出异常时,Spring Interceptor获取异常并使用B类事务注释规则(没有noRollBackFor规则)并执行事务回滚。这样,在method1中完成的所有更改都不会保留。 我应该怎样改变回滚?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

好吧,我已经解决了我的问题。 关键是B类由@Transaction注释,因此对于每个被调用的公共方法(例如method2),创建了一个没有noRollBack属性的新事务。 这样,对于我的情况,解决方案是从类中取出@Transaction注释,并将其仅添加到需要新事务的方法中,即method2没有注释。

这就是全部!