UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only解决办法

引发原因:当前类中使用@Transactional注解,当前类中的一个方法内的try catch内调用了来自两个服务类的中的两个方法,

方法1正常运行,但是方法2抛出异常,此时因为当前类中有@Transactional注解,所以方法1也需要回滚,但是两个方法都同在

一个try catch 内,所以也无法回滚,这时抛出异常UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only。

解决办法:用另外一个类且有@Transactional注解,将两个方法封装成同一个方法3,此时两个方法在同一个事物中,再调用方法3时,方法内其中一个方法

抛出异常,另一个方法也能够正常回滚。

示意图如下:

 

原文地址:https://www.cnblogs.com/max1995/p/15426882.html