以下是我必须维护的应用程序中遇到的问题:
我有一个带注释@Transactional(rollbackFor = CustomExceptionA.class)
的第一堂课
然后在下面的代码中我调用@Transactional(noRollbackFor = CustomExceptionB.class)
的方法
注意:CustomExceptionA
或CustomExceptionB
只有一个共同的祖先Exception
。
当然,当我执行代码时会引发一个异常,它既不是CustomExceptionA
类型也不是CustomExceptionB
类型,也不是它们的子类。
所以问题很简单: 在这种情况下,交易会发生什么?它会提交吗?它会回滚吗?它是否保持未完成状态等待应用程序执行某些操作(这实际上是一个可以解释此应用程序中看到的一些丑陋内容的答案)?而且:为什么?
感谢您的帮助和时间。
答案 0 :(得分:10)
为什么呢?这非常有意义:已检查的异常对于处理或丢弃是必需的,因此如果您将已检查的异常从事务方法中抛出,那么框架会假设您知道自己在做什么。如果未解决的例外情况可能是错误或异常处理缺陷,那么事务将被回滚以避免数据损坏。