service层设置手动事务回滚,原因@Transactional事务与try{}catch(){}会失效,导事务不回滚

 

1、原因是这样的,在service层的方法中,需要执行多条update或insert的数据操作,service的方法上是加@Transactional(rollbackFor = Exception.class)注解,然后方法体中又用了try{}catch(){}操作,导致在update多个执行时,其中有一条sql报错,本应该执行事务回滚操作报错前的update都不应该生效,但一看数据库表,已经生效了。

这就导致回滚是无效的。

 

那么我们就直接使用手动回滚好了,在执行数据表操作后面加上,手动事务回滚代码(亲测有效)

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

 

示例,如图:

去掉方法上@Transactional(rollbackFor = Exception.class) 注解,使用手动事务回滚

批量执行sql时,其中一条报错,所有事务回滚,报错前执行的事务也将无效。

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2024-03-15 22:15  下课后我要去放牛  阅读(172)  评论(0编辑  收藏  举报