Spring Transactional on方法具有多个数据库操作

时间:2019-02-07 05:11:49

标签: spring transactions

我有点困惑。我虽然在方法上@Transactional表示所有操作或全部都没有。

说我有这种方法:

@Transactional
public void fewDbOpeations(){
    calculation1();
    myDao.saveResult();
    calculation2();
    myDao.saveResult();
}

calculation2()抛出异常,或者我第二次调用myDao.saveResult出错,尽管整个方法都用@Transactional注释了calculation1()之后的保存结果,但我看到的是通话成功。

那是我第一次与数据库交互,保存了我想要的记录,但是第二次失败,但是我认为因为方法是@Transactinal,所以即使第一个调用保存到数据库也应该回滚。

我想念什么吗?

2 个答案:

答案 0 :(得分:0)

这取决于您处理异常的方式以及这些内部方法调用上是否还有@Transactional注释。

要在fewDbOpeations()中具有“全有或全无”的行为,请确保对所有内部方法调用执行以下操作:

  • 不要用@Transactional(propagation=REQUIRES_NEW)注释
  • 不要在内部捕获异常,也不要抛出异常。抛出RuntimeExceptionError,但未选中Exception(假设您使用的是默认设置)。

答案 1 :(得分:0)

@Transactional (rollbackFor = Exception.class)
    public void fewDbOpeations(){
    calculation1();
    myDao.saveResult();
    calculation2();
    myDao.saveResult();
}

也尝试使用此方法并引发异常。