相关疑难解决方法(0)

Spring @Transactional Annotation:自我调用

我知道当从同一个类内部调用事务方法时,它不会在事务中运行.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);
}
Run Code Online (Sandbox Code Playgroud)

假设从另一个对象调用saveAB并在saveB中发生异常,因此saveA成功完成但saveB没有成功.据我所知,即使saveA和saveB不是事务性的(因为它们是从同一个对象调用的),因为saveAB是事务性的,它仍然应该回滚.

我不明白为什么人们说自我调用打破了交易?只要调用方法是事务性的,不应该按预期工作吗?这里有什么我想念的吗?

java spring hibernate transactional self-invoking-function

11
推荐指数
2
解决办法
4577
查看次数