0

我想我不明白未经检查的异常。

我正在使用弹簧/休眠。

在事务中,我正在捕获 NullPointerException(因此未选中),但最后我的事务没有回滚。

是因为我在抛出 NPE 的相同方法中捕获了 NPE 吗?这是我从代码的其他部分看到的唯一不同之处,我在其中抛出了一个 IllegalArgumentException,该异常在另一个方法中被抛出它的方法捕获(并且以回滚结束。)

谢谢,

4

1 回答 1

2

如果未捕获的异常通过事务代理,Spring 将回滚事务。

如果您在包装方法中捕获异常,则事务不会自动回滚。

如果您出于某种原因确实需要捕获异常,您可以重新抛出它,抛出另一个(考虑到方法的合同是有意义的)或手动回滚事务。请记住,最后一个选项打破了 spring 的透明度。

于 2011-07-08T10:30:16.767 回答