事务失效问题
同一个类中,a方法没有事务,b方法有事务,则b方法事务失效
事务的传播行为
七种传播行为
REQUIRED:你有我加入,你没有我就新建。
SUPPORTS:你有我加入,你没有我也没有。
MANDATORY:你有我加入,你没有我就抛异常。
REQUIRES_NEW:不管你有没有,我直接开启一个新的事务。
NOT_SUPPORTED:b方法总是非事务地执行,a方法有事务则会挂起
NEVER:不支持事务,A方法调用B方法,如果A方法有事务,则B方法会抛出异常。
NESTED:子事务出异常,父事务catch住情况下,父事务不会回滚。如果父事务出现异常,那么父事务和子事务都会回滚。
前提:两个方法,a方法,b方法,且不在同一个类中
1. REQUIRED:你有我加入,你没有我就新建。
你有我加入
a,b方法操作的数据都没有发生变化
你没有我就新建。
a,b方法操作的数据都没有发生变化
2. SUPPORTS:你有我加入,你没有我也没有。
你有我加入,同上,数据无变化
你没有我也没有,则b方法操作的数据会发生变化
3.MANDATORY:你有我加入,你没有我就抛异常。
你有我加入,同上,数据无变化
你没有我就抛异常,并且数据没有发生变化。
4.REQUIRES_NEW:不管你有没有,我直接开启一个新的事务。
当代码出现错误,由于都会创建一个新的事务,所以数据都不会发生变化
5.NOT_SUPPORTED:b方法总是非事务地执行,a方法有事务则会挂起
a方法操作的数据发生回滚,b方法处理的数据发生变化
b方法处理的数据发生变化
6.NEVER:不支持事务,A方法调用B方法,如果A方法有事务,则B方法会抛出异常。
抛出异常,且数据没有发生变化
7.NEVER:不支持事务,A方法调用B方法,如果A方法有事务,则B方法会抛出异常。
a方法捕获b方法的异常,a方法不会回滚,而b方法发生回滚
a方法发生异常,a、b方法都会发生回滚
总结
REQUIRED:你有我加入,你没有我就新建。
SUPPORTS:你有我加入,你没有我也没有。
MANDATORY:你有我加入,你没有我就抛异常。
REQUIRES_NEW:不管你有没有,我直接开启一个新的事务。
NOT_SUPPORTED:b方法总是非事务地执行,a方法有事务则会挂起
NEVER:不支持事务,A方法调用B方法,如果A方法有事务,则B方法会抛出异常。
NESTED:子事务出异常,父事务catch住情况下,父事务不会回滚。如果父事务出现异常,那么父事务和子事务都会回滚。