我知道当在同一个类中调用事务方法时,它将不会在事务中运行。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
是事务性的,应该仍然回滚。
我不明白的是为什么人们说自我调用会破坏事务?只要调用方法是事务性的,一切都应该按预期工作吧?这里有什么我没有理解的东西吗?
saveA
也不会对saveB
进行事务处理。在这种情况下,自我调用是一个问题。 - M. Deinum