事务为什莫会失效

1、事务传播方式有哪几种?

@Transactional中的几种事务传播

  • 1.REQUIRED 如果方法在运行的时候存在事务,已经存在了一个事务,那么会加入到该事务中,否则的话自己创建一个新的事务。 (spring的默认传播行为就是REQUIRED) 例子: ...
  • 2.SUPPORTS 如果有事务就在事务的环境下执行,否则反之不在事务的环境下执行。 例子: ...
  • 3.MANDATORY 当前的方法必须在事务中运行,否则的话就抛出异常。 例子: ...
  • 4.REQUIRES_NEW 当前的方法必须在自己的事务内运行,如果有其他的事务就将它挂起。 例子: ...
  • 5.NOT_SUPPORTED 当前的方法不会在事务中运行,如果有事务就会将它挂起。 例子: ...
  • 6.NEVER 当前的方法如果在事务中运行,则抛出异常。 例子: ...
  • 7.如果存在事务运行,那么这个方法就是在这个事务的嵌套事务内运行,嵌套事务是独立提交或回滚;

    如果不存在事务,就按照REQUIRED执行;

    如果主事务回滚,子事务一定会回滚;如果子事务回滚,主事务可以回滚,也可以不回滚。

2、事务嵌套会导致事务失效吗 ?举例说明

举例:两个均加了事务注解的方法A和B,在A方法中调用B方法,会导致B的事务不起作用,因为加了事务注解的方法,并不是本身在执行,而是 代理类在执行,而在A方法中调用B方法的时候,默认的是this.B();,代表并没有使用代理类来执行,所以不会享受代理的服务。

3、你知道哪些情况下事务会失效吗

1、同一个类中两个方法A和B,没有添加事务注解的方法A调用了添加事务的方法B,事务不会生效

2、方法不是public的:@ Transactional 只能用于public的方法上,否则事务失效

3、数据库不支持事务

4、没有被Spring管理(类上没有注释@Service等IOC注解)

5.在同一个类不要使用this.XX(方法),因为这个this并不是spring用cglib增强的类,没有被代理,那就没有事务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值