@Transactional同类中调用失效问题案例测试

最近做了一个批量插入报价的需求,然后在编辑报价时还能新增(新增多个就又是批量插入了),然后就把批量插入的地方提出来变成了一个方法,然后就看到网上说同类调用,@Transactional失效,吓得我连夜试了一下

结论如下:

1.saveOffer()加了@Transactional,insert()没加,事务可以回滚
2.saveOffer()没加@Transactional,insert()加了,事务无法回滚
3.1.saveOffer()和insert()都加了@Transactional,事务也可以回滚

a:saveOffer()方法
b:insert()方法
√:成功回滚
×:回滚失败

在这里插入图片描述
在这里插入图片描述
测出来的这个结论和网上一些说的不一样,我也不知道是版本变动,源代码修改了,还是我操作有误,和网上说的差异有点大

代码如下:

@Transactional
public void saveOffer(OfferSaveRequest request) {

    //报价信息
    OfferDO offerDO=new OfferDO();
    offerDO.setId(IdWorker.getId());
    offerDO.setExpressCompanyName("顺丰");
    offerDO.setExpensesItemName("运输费");
    offerDO.setUnit("单");
    offerDO.setFees("10");
    offerMapper.insert(offerDO);

//内部调用
    this.insert(request);

//        if (true) {
//            throw new RuntimeException("测试异常");
//        }
}

@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
public void insert(OfferSaveRequest request) {

    //合同信息
    ContractDO contractDO=new ContractDO();
    contractDO.setId(IdWorker.getId());
    contractDO.setContractName("测试合同");
    contractMapper.insert(contractDO);

//        int i=1/0;
}

网上说的@Transactional同类中调用失效,应该指的是a没加事务注解,而b加了事务注解,才失效的。

按我上面测试的,不管在a中报异常还是在b中报异常,回滚的时候两个表都会回滚,要不回滚就都不回滚。

当a没加事务注解,b加了事务注解的情况难道是指当b出了异常,b回滚,而不影响a的写入数据,这种业务我还没接触到。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值