使用catched RuntimeException回滚

时间:2013-04-22 16:00:24

标签: java hibernate rollback transactional runtimeexception

我显然需要一些关于交易回滚的帮助。我正在开发一个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导致回滚还是我错了?

1 个答案:

答案 0 :(得分:0)

如果您发现未经检查的例外,例如RuntimeException,交易不会被回滚。

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