REQUIRED:A调用B,A当前没有事务(不加@Transactional),则新建一个事务,否则加入A的事务
SUPPORTS:A调用B,A当前没有事务(不加@Transactional),则不以事务方式执行,否则加入A的事务
MANDATORY:A调用B,A当前没有事务(不加@Transactional),则抛出异常,否则加入A的事务
REQUIRES_NEW:A调用B,无论A有没有事务,B创建一个新事务执行
NOT_SUPPORTED:A调用B,无论A有没有事务,B都不以事务方式执行
NEVER:A调用B,A当前没有事务(不加@Transactional),正常执行,否则抛出异常
NESTED:A调用B,A当前没有事务(不加@Transactional),则新建一个事务,否则嵌套在A的事务里
NESTED和REQUIRED的区别:
假如NESTED中B事务抛出异常,则B事务回滚,A事务不受影响(子事务回滚,父事务不受影响);
假如REQUIRED中B事务抛出异常,则A、B事务一起回滚;
NESTED和REQUIRES_NEW的区别:
假如NESTED中A事务抛出异常,则A、B事务一起回滚(父事务回滚,子事务一起回滚);
无论REQUIRES_NEW中A,B事务哪个抛出异常,都是各自回滚各自的;