我有点困惑。我虽然在方法上@Transactional
表示所有操作或全部都没有。
说我有这种方法:
@Transactional
public void fewDbOpeations(){
calculation1();
myDao.saveResult();
calculation2();
myDao.saveResult();
}
说calculation2()
抛出异常,或者我第二次调用myDao.saveResult
出错,尽管整个方法都用@Transactional
注释了calculation1()
之后的保存结果,但我看到的是通话成功。
那是我第一次与数据库交互,保存了我想要的记录,但是第二次失败,但是我认为因为方法是@Transactinal
,所以即使第一个调用保存到数据库也应该回滚。
我想念什么吗?
答案 0 :(得分:0)
这取决于您处理异常的方式以及这些内部方法调用上是否还有@Transactional
注释。
要在fewDbOpeations()
中具有“全有或全无”的行为,请确保对所有内部方法调用执行以下操作:
@Transactional(propagation=REQUIRES_NEW)
注释RuntimeException
或Error
,但未选中Exception
(假设您使用的是默认设置)。答案 1 :(得分:0)
@Transactional (rollbackFor = Exception.class)
public void fewDbOpeations(){
calculation1();
myDao.saveResult();
calculation2();
myDao.saveResult();
}
也尝试使用此方法并引发异常。