Stone/:
别人已经给出结论啦 :所有Propagation.REQUIRED修饰的内部方法和外围方法均属于同一事务,只要一个方法回滚,整个事务均回滚。
外层方法调用了内层addRequiredException方法,addRequiredException方法会抛出异常,外层方法虽然吧addRequiredException的异常捕获了,可是addRequiredException内层方法自带事务注解,
并且addRequiredException方法没有捕获异常,所以内层方法addRequiredException事务将是一个失败的内层事务。
Propagation.REQUIRED应该就是吧二个方法的事务合成了一个事务,二个方法的事务中只要有一个事务是失败的,那么整个事务都会失败
然后我刚刚还试了一下 ,如果吧addRequiredException方法的@Transactional(propagation = Propagation.REQUIRED)拿掉 ,那么张三李四都会插入成功。
addRequiredException去掉了@Transactional注解方法本身不携带事务,异常又是在插入方法之后抛出的所以李四能成功插入,可以吧addRequiredException方法理解为普通方法。
然后外层事务吧addRequiredException给捕获了,所以外层事务本身就没异常不涉及到回滚操作。
个人理解,别喷哈!