【发布时间】:2013-04-22 16:00:24
【问题描述】:
我显然需要一些关于事务回滚的帮助。我正在开发一个 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);
}
}
从控制器执行此操作后,barparameter 的更改存在于我的数据库中,这意味着事务尚未回滚。
现在的问题
捕获的 runtimeException 会导致回滚还是我错了?
【问题讨论】:
-
也许我只是不明白这里发生了什么,但是您不需要将回滚代码放在 catch 块中吗?
-
FWIW 你在 try-catch 之外调用
fooDao.save(foo),所以如果这是导致RuntimeException的原因,那么它当然会回滚,因为它没有被捕获。
标签: java hibernate rollback transactional runtimeexception