事务:为了达到某个目的而做的一系列操作,要么一起成功(事务提交),要么一起失败(事务回滚)。

传播特性

PROPAGATION_REQUEIRES_NEW:肯定会创建子事务,父子互不影响;
PROPAGATION_NESTED:肯定会创建子事务,父影响子,子不影响父;
PROPAGATION_REQUEIRED:子事务和父事务合并成一个事务,父子互相影响;

如果想实现:子影响父,但父不影响子的效果,我觉得可以把传播级别设置 PROPAGATION_REQUEIRES_NEW,然后在父中捕获子的异常,然后再抛出异常来实现。

事务传播行为类型 说明
PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择,也是默认行为。
PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行,如果当前有事务就加入到事务中。
PROPAGATION_MANDATORY 如果当前有事务就加入到事务中,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起,两个事务之间互不影响。
PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED 如果当前有事务,就新建一个事务,如果有就在当前事务中嵌套一个事务,两个事务会相互影响,一个事务回滚,另外一个事务也会回滚。

image.png

隔离级别

isolation,一般都是默认的,数据库是什么级别就用什么