Java 使用捕获的RuntimeException回滚
我显然需要一些关于事务回滚的帮助。我正在开发一个Spring/JPA/Hibernate应用程序 对我来说,Java 使用捕获的RuntimeException回滚,java,hibernate,rollback,transactional,runtimeexception,Java,Hibernate,Rollback,Transactional,Runtimeexception,我显然需要一些关于事务回滚的帮助。我正在开发一个Spring/JPA/Hibernate应用程序 对我来说,RuntimeException即使捕获到它们,也会回滚事务。我通过一些测试(不幸的是,我不能把它们放在这里,因为我已经没有了)和阅读来推断这一点 但我在以下代码中遇到了另一种行为: public class Service implements IService { @Transactional public void test() { // ... try
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是否会导致回滚?还是我错了?如果捕获未检查的异常,例如
runtimeException
,则事务将不会回滚
默认情况下,如果您的方法由于未检查的异常而退出,则事务将回滚。默认情况下,选中的异常不会触发回滚。也许我不明白这里发生了什么,但是您不需要将回滚代码放在catch块内部吗?FWIW您正在try catch外部调用
fooDao.save(foo)
,因此如果这导致了运行时异常
,然后,它当然会回滚,因为它没有被捕获。谢谢,你知道为什么在某些情况下,即使捕获了runtimeexception,它也会导致回滚吗?