项目中遇到的问题-Spring Boot + Mybatis plus, 事务不生效

文章目录

      • 1. Spring Boot + Mybatis plus, 事务不生效。

1. Spring Boot + Mybatis plus, 事务不生效。

  1. 问题重现:
@Autowired
private DeviceTypeServiceImpl deviceTypeService;

@Override
@Transactional(rollbackFor = Exception.class)
public void add(DeviceTypeParam param) {
    validParam(param); // 这样调用方法, 不会使用事务控制调用的方法.

    deviceTypeService.validParam(param); // 必须使用当前类的对象, 去调用才能使此方法事务有效.
}

@Override
@Transactional(rollbackFor = Exception.class)
public void validParam(DeviceTypeParam param) {
    if (ToolUtil.isEmpty(param.getParentId())) {
        throw new ServiceException(400, "parentId");
    }
    
    if (ToolUtil.isEmpty(param.getDeviceTypeName())) {
        throw new ServiceException(400, "deviceTypeName");
    }
}
  1. 原理: 因为Spring事务使用的是AOP来做事务的。因此,只是调用方法,无法进入到切面;因此;需要使用对象来调用方法,以此把方法放入切面中。

你可能感兴趣的:(项目问题,JAVA)