实际问题是这样的:
一个方法在添加@Transactional(rollbackFor=Exception.class) 注解后在抛出异常的时候是可以回滚的,但方法里有部分语句(获取数据库里的某种ID,自增的,不需要回滚,保证唯一性),有没有方法可以将这部分语句排除出回滚而不影响其他的?

解决方案 »

  1.   

    不需要回滚的用新方法封起来,新方法声明不需要事务或者新建事务
    @Transactional(propagation=Propagation.NOT_SUPPORTED)
    或者
    @Transactional(propagation=Propagation.REQUIRES_NEW)
      

  2.   

    你要明白事务性(Transaction)具有原子性,意思就是事务里的东西要么都回滚,要么都提交。如果可以部分回滚,部分提交,那就不叫事务性了。所以你理清业务需求,把需要回滚和不需要回滚的内容分开来做吧。
      

  3.   


    没用,封装了在事务里引用依然会回滚
    封装到新类的新方法里,然后在新类的新方法声明Propagation.REQUIRES_NEW,参考一下这两篇文章
    https://www.cnblogs.com/abcwt112/p/5340897.html
    https://blog.csdn.net/catoop/article/details/53482960