【发布时间】:2014-07-18 20:41:08
【问题描述】:
我知道当从同一个类中调用事务方法时,它不会在事务中运行。 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。在这种情况下,自我调用是一个问题。
标签: java spring hibernate transactions self-invoking-function