我知道当从同一个类内部调用事务方法时,它不会在事务中运行。Spring 为事务方法创建一个代理,并将它们包装在一个 try-catch 块中,并在发生异常时回滚。考虑以下场景:
@Transactional
public void saveAB(A a, B b)
{
saveA(a);
saveB(b);
}
@Transactional
public void saveA(A a)
{
dao.saveA(a);
}
@Transactional
public void saveB(B b)
{
dao.saveB(b);
}
假设saveAB
从另一个对象调用并且发生异常saveB
,因此saveA
成功完成但saveB
没有。据我所知,即使saveA
并且saveB
不是事务性的(因为它们是从同一个对象调用的),因为saveAB
是事务性的,它仍然应该回滚。
我不明白的是为什么人们说自我调用会破坏事务?只要调用方方法是事务性的,不应该一切都按预期工作吗?我在这里有什么遗漏吗?