使用jpa简化CRUD,每次重启就会清除数据,需要创建数据库:test
Spring提供了7中事务传播行为,用来控制多个方法相互调用的事务边界
本文的调用发是methodA,被调用方是methodB
默认的传播行为
方法B的事务传播特性是REQUIRED,方法A有事务,方法A调用方法B, 方法B不开启事务
方法B抛异常,方法A、B全部回滚
方法B抛异常,方法A捕获,会抛异常,全部回滚
方法B的事务传播特性是SUPPORTS
方法A没有事务,方法A、B运行异常都不会回滚
方法A有事务,方法A异常,方法A、B都不会回滚
方法A有事务,方法B异常,方法A、B全部回滚
该方法必须运行在一个事务中,否则就报错
方法B为MANDATORY
方法A没有事务,调用方法B执行会报错
方法A有事务,执行异常,方法A、B都回滚
方法A有事务,方法B抛异常,都回滚
方法A有事务,方法B抛异常,方法A捕获异常,报错
该方法必须运行在一个新的事务中
方法A有事务,方法A异常,方法A回滚,方法B不回滚
方法A有事务,方法B抛异常,都会回滚
方法A有事务,方法B抛异常,方法A捕获,方法B回滚
方法B是NOT_SUPPORTED
方法A有事务,方法B抛异常,方法A回滚,
方法A有事务,方法B抛异常,方法A捕获,都不回滚
该方法不能运行在另一个事务环境中
方法B是NEVER
方法A有事务,调用方法B会报错
方法B是NESTED
方法A没有事务,方法B抛异常,方法B回滚,方法A不回滚
方法A没有事务,方法A抛异常,都不回滚
方法A有事务,方法A抛异常,都回滚
方法A有事务,方法B抛异常,都回滚
方法A有事务,方法B抛异常,方法A捕获异常,方法B回滚,方法A不回滚