Spring的TransactionInterceptor覆盖了我的异常

LAC*_*LAC 5 spring hibernate spring-transactions

我有一个DAO类,可以javax.persistence.PersistenceException将它们包装起来并作为检查后的异常重新抛出。此方法标记为@org.springframework.transaction.annotation.Transactional

如果我在DAO中遇到异常,例如违反约束,它将包装在我的自定义异常中,但是spring会覆盖我的异常

[tp1415357209-22] o.s.t.i.TransactionInterceptor           : Application exception overridden by commit exception
Run Code Online (Sandbox Code Playgroud)

并抛出自己的 org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly

通过记录并重新抛出自己的异常来“吞噬”我的异常。如何防止spring这样做?

聚苯乙烯

@Transactional(noRollbackFor = { MyCustomException.class})
Run Code Online (Sandbox Code Playgroud)

不起作用。当然,我确实希望将事务设置为回滚,但是我不希望我的异常被春天吞没。

LAC*_*LAC 6

解决方案是使用rollbackFor而不是其他属性,以便 spring 不会吞下我自己的异常