我遇到以下问题:
我有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中完成的所有更改都不会保留。 我应该怎样改变回滚?
提前谢谢。
答案 0 :(得分:0)
好吧,我已经解决了我的问题。 关键是B类由@Transaction注释,因此对于每个被调用的公共方法(例如method2),创建了一个没有noRollBack属性的新事务。 这样,对于我的情况,解决方案是从类中取出@Transaction注释,并将其仅添加到需要新事务的方法中,即method2没有注释。
这就是全部!