管理事务回滚

RoD*_*RoD 8 java spring hibernate jpa

我的注释有问题@Transactional.

我有一种做某些东西的方法,而且我在里面扔了一个东西IllegalArgumentException.

我认为(即使我已经捕获了异常)它将事务设置为rollbackOnly(异常抛出时的一些触发器)并且它结束而没有成功提交事务.

这是错误:

org.springframework.transaction.TransactionSystemException : Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
Run Code Online (Sandbox Code Playgroud)

我可以添加@Transactional一个无回滚 - 我抛出和捕获的异常,但我不认为这是一个真正的解决方案.

也许有一种方法可以取消对事务的rollbackOnly,但我认为这也不是最好的做法......

所以,你知道我该怎么办?

谢谢,

Sea*_*oyd 6

  1. 尝试/捕获IllegalArgumentException类似于代码气味的声音(有效的Java项目57:仅在特殊情况下使用例外)

  2. 是否将事务设置为rollbackOnly取决于所使用的代理机制.如果使用JDK代理,则处理程序位于外部,无法在方法调用中注册捕获的异常.如果你使用mode=aspectj,事情会有所不同.此外,如果您有嵌套的事务上下文,则必须使用@Transactional(noRollbackFor=IllegalArgumentException.class)内部方法.