SpringBoot事务回滚

1、Controller代码

   @PostMapping("/add")

public RestResult add(ModelParamInputDTO modelParamDTO) {

this.isValid("modelName", modelParamDTO.getModelName());

this.isValid("drugId", modelParamDTO.getDrugId());

this.isValid("drugCode", modelParamDTO.getDrugCode());

aiModelService.addAiModel(modelParamDTO);

return ResultGenerator.genSuccessResult().setMessage("保存成功");

}

@PostMapping("/isValid")

public RestResult isValid(@RequestParam String key, String value) {

Boolean isValid = aiModelService.isValid(key, value);

if (isValid) {

return ResultGenerator.genSuccessResult();

} else {

String[] ret = {""};

VALID_MESSAGE.forEach((k, v) -> {

if (k.equals(key)) {

ret[0] = v;

}

});

throw new ServiceException(ret[0]);

}

}

2、service代码

@Override

@Transactional(rollbackFor=Exception.class)

public void addAiModel(ModelParamInputDTO modelParamDTO) {

String modelId = CoreUtils.getUUID();

AiModel aiModel = new AiModel();

BeanUtils.copyProperties(modelParamDTO, aiModel);

aiModel.setId(modelId);

aiModel.setOrgId(ORG_ID);

aiModel.setGmtCreate(new Date());

aiModel.setModelName(modelParamDTO.getDrugName());

aiModelMapper.insert(aiModel);

String s = null;

int d = s.length();

}

3、Application代码

@SpringBootApplication

@MapperScan("cn.itpower.pms.modules.**.dao")

@EnableConfigurationProperties

@EnableTransactionManagement

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

代码如上,我自己设置了一个空指针异常,但是事务没有回滚,我试过:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
结果事务还是没有回滚,请问究竟是怎么回事呢?

回答:

在Application上是否添加了注解

@EnableTransactionManagement

回答:

mysql的话,数据库引擎需要设置innodb

回答:

你需要贴出的是调用addAiModel方法的那部分代码

回答:

能确定下你的表是innoDB吗

ALTER TABLE `database名`.`表名`

ENGINE = InnoDB;

比如mysql建一个Database test,下面的表既可以是myisam 也可以是innodb

clipboard.png

回答:

可以看看这个例子项目:https://github.com/chanjarste...
希望对你有用

回答:

   @PostMapping("/add")

public RestResult add(ModelParamInputDTO modelParamDTO) {

this.isValid("modelName", modelParamDTO.getModelName());

this.isValid("drugId", modelParamDTO.getDrugId());

this.isValid("drugCode", modelParamDTO.getDrugCode());

aiModelService.addAiModel(modelParamDTO);

return ResultGenerator.genSuccessResult().setMessage("保存成功");

}

如上代码可能存在问题,是否和缺少注解@RequestBody有关?
另外,Controller不要使用dto接收参数,使用VO。

以上是 SpringBoot事务回滚 的全部内容, 来源链接: utcz.com/p/169256.html

回到顶部