0

我显然需要一些关于事务回滚的帮助。我正在开发一个 Spring/JPA/Hibernate 应用程序。

对我来说,RuntimeException 即使他们被抓住了,也在回滚交易。我通过一些测试(不幸的是我不能把它们放在这里,因为我不再拥有它们)和读数来推断这一点。

但是我遇到了以下代码的另一种行为:

public class Service implements IService {

  @Transactional
  public void test()
  {
    // ...
    try {
      throw new RuntimeException();
    } catch (RuntimeException re) {
    }
    foo.setBar(barValue);
    this.fooDao.save(foo);
  }
}

从控制器执行此操作后bar,我的数据库中存在参数更改,这意味着事务尚未回滚。

现在的问题

捕获的 runtimeException 会导致回滚还是我错了?

4

1 回答 1

1

如果您捕获到未经检查的异常,例如RuntimeException,事务将不会回滚。

默认情况下,如果您的方法由于未经检查的异常而退出,则事务将回滚。默认情况下,检查的异常不会触发回滚。

于 2013-04-22T16:02:55.763 回答