2013-04-22 50 views
0

我显然需要一些关于事务回滚的帮助。我正在研究Spring/JPA/Hibernate应用程序。回滚捕获的RuntimeException

对我来说,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参数的变化是出现在我的数据库,意味着交易尚未rollbacked。

现在的问题

难道一个擦肩而过的RuntimeException导致回滚还是我错了?

+0

也许我只是不明白这里发生了什么,但是你不需要将回滚代码放在catch块中? – 2013-04-22 16:02:36

回答

0

如果发现异常,则该事务将不会回滚。如果您的方法由于异常而退出,那么事务将被回滚。

+0

谢谢,你有一个想法,为什么在某些情况下,即使运行时间受到影响,它会导致回滚? – DessDess 2013-04-22 16:15:02

+0

该代码可能会引发另一个异常。 – 2013-04-22 16:15:50

+0

这当然不是这样,所以我会调查谢谢 – DessDess 2013-04-23 07:41:31