我显然需要一些关于交易回滚的帮助。我正在开发一个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导致回滚还是我错了?
答案 0 :(得分:0)
如果您发现未经检查的例外,例如RuntimeException
,交易不会被回滚。
默认情况下,如果您的方法因未经检查的异常而退出,则将回滚该事务。默认情况下,已检查的异常不会触发回滚。