我有两个类:
@Service
@Transaction
class A {
public void method1() {
private B;
try {
save1()
b.method2()
} catch (SqlException e) {
doSomeThing();
}
@Autowired
public setB(){
this.B = B;
}
}
}
@Service
class B {
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void method2(){
save2()
throw new SqlException();
}
}
我得到了一个预期的
SqlException
,但也得到了一个 UnexpectedRollBackException
,程序停止了。
我想知道为什么通过 save2() 持久化的数据没有回滚?这是外部事务的问题吗?
更新:我尝试在 A 类中捕获
UnexpectedRollBackException
,一切都正常工作。但我仍然需要一些解释为什么会出现这个异常?我认为当内部事务开始时,外部事务应该被挂起,那么为什么外部事务的回滚对于它来说是意外的?谢谢。