我有两个方法都是@Transactional,并且都执行一些数据库操作,主要是插入。
我从methodA
调用methodB@Transactional
public void methodA(){
methodB();
// Some database Operations
// some error conditions....
throw exception;
}
@Transactional
public void methodB(){
// Some database Operations
}
所以我想只在所有操作都成功的情况下提交MethodA和MethodB的数据库事务。 因此,即使在methodA中遇到异常,仍然会提交方法B中所做的更改。
如果在methodA中遇到错误,我希望更改MethodB。
我是否需要做其他事情。
答案 0 :(得分:2)
methodA()
内调用的所有方法都是事务性的,@Transactional annotation has a propagation of required by default。因此methodB()
中的@Transactional并非完全必需。
答案 1 :(得分:1)
当从methodA调用methodB时,它不会创建新事务,因为您没有调用弹出代理来排序所有事务创建和回滚,因此来自methodA和methodB的插入将在同一事务中执行。
所以不,你不需要做任何其他事情......