我认为我不了解未经检查的异常。
我正在使用spring / hibernate。
在事务中,我捕获了NullPointerException(因此未选中),但是到那时我的事务没有回滚。
是因为我在抛出NPE的相同方法中捕获了NPE吗?
这是我从代码的另一部分看到的唯一区别,即我抛出了一个IllegalArgumentException,该异常在抛出该异常的其他方法中被捕获(并以回滚结尾)。
谢谢,
最佳答案
如果未捕获的异常通过事务代理,Spring将回滚事务。
如果您在包装方法中捕获到异常,则事务将不会自动回滚。
如果确实由于某种原因需要捕获异常,则可以将其重新抛出,抛出另一个异常(考虑到方法的约定是有意义的),或者手动回滚事务。请记住,这最后一个选项破坏了春天的透明度。