JeeSite 在service中分别调用另外两个service中的方法,第二个service发生异常无法进行回滚。

JeeSite 胡先生 2022年7月31日 11:50 13 查看原文

1.测试, 事物已配置@Transactional(propagation=Propagation.REQUIRED) ,但是无效。

检查springmvc的配置文件和spring 的配置文件,对controller的扫描和service的扫描没有重复

2.mysql数据库抛出 不为空的校验,回滚成功, 抛出 唯一键校验,无法回滚、

public void save(InquiryRecord inquiryRecord) {

    Vehicle vehicle = inquiryRecord.getVehicle();
    Driver driver = inquiryRecord.getMasterDriver();
    if (StringUtils.isBlank(vehicle.getId()) || vehicle == null) {
        vehicle = new Vehicle();
        vehicle.setCode(StringUtils.generateSequenceNo("vehicleNo"));
        vehicle.setLicense(inquiryRecord.getLicense());
        vehicle.setVehicleType(inquiryRecord.getVehicleType());
        vehicle.setUnderpanNo("-");
        vehicle.setProduceDate(new Date());
        vehicle.setPurchaseDate(new Date());
        vehicleService.save(vehicle);
        inquiryRecord.setVehicle(vehicle);
    }
    if (StringUtils.isBlank(driver.getId()) || driver == null) {
        driver = new Driver();
        driver.setCode(StringUtils.generateSequenceNo("vehicleNo"));
        driver.setName(inquiryRecord.getName());
        driver.setIdcard(inquiryRecord.getIdcard());
        driver.setSex(inquiryRecord.getSex());
        driver.setMobile(inquiryRecord.getMobile());
        driver.setCardType(inquiryRecord.getCardType());
        driverService.save(driver);// ** 唯一约束校验,save中报错,无法回滚**

        inquiryRecord.setMasterDriver(driver);
        legService.save(new Leg());
    }
    super.save(inquiryRecord);
}


@Transactional
public void testTrans(Shipment shipment){
    shipmentService.save(shipment);
    legService.save(new Leg()); **//数据库不为空校验,成功回滚** 
}
回答
9 条回答

@thinkgem 你好,我再次断点代码,发现了没有回滚的原因,但是没找到解决办法, 原因就是我开始调用查询数据库获取流水号,然后中间对某个对象进行insert操作,当我再次调用前面的方法获取流水号的时候,返回流水号的同时,同步把前面的insert的事物给提交了,后续再次进行数据库操作的时候,就会新开一个事务,导致没办法回滚前面的代码! 输入图片说明

@thinkgem 这个错误还和版本有关系么? 我还真不知道怎么看我这个是属于jeestie的哪个版本?

@god_is_gril 用的jeesite那个版本?

能看到了,这两天问题比较忙没处理过来,你也可以再open@god_is_gril

貌似ThinkGem不会二次看issues,我就先关闭了,重新提问 :smiley:

@thinkgem 能否告知一下解决办法,这个东西没解决老是会想着。做梦都在想着处理这个问题 :joy:

@thinkgem 补充说一下,我更换了druid的数据源。还是同样的问题存在

@thinkgem 确实存在这个提示,我查询了相关资料,基本都是说controller和service的扫码重复,和我的不太一样,有何解决办法?

看下日志信息是否有这个:[o.m.spring.transaction.SpringManagedTransaction] - JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl] will not be managed by Spring

热门问题
相关推荐
推荐分类