项目背景:
项目采用SpringBoot+Mybatis-Plus+ShardingJDBC进行数据库插入操作,ShardingJDBC使用了其分库分表、读写分离及影子库的功能。
问题发现:
在一次新增操作时,t1表新增或更新多条数据后t2表需根据t1的主键先删除表中数据后再进行批量插入新的配置数据,通过断点发现t1表插入成功后未返回主键ID。 贴上涉事代码块:
List<MemberRightShowConfig> memberRightShowConfigList = mrsRightDetailVO.getShowConfigs().parallelStream()
....
.collect(Collectors.toList());
.....
saveOrUpdateShowConfigs = memberRightShowConfigService.saveBatch(memberRightShowConfigList); ...
for (int i = 0; i < memberRightShowConfigList.size(); i++) {
MemberRightShowConfig memberRightShowConfig = memberRightShowConfigList.get(i);
Long showConfigId = memberRightShowConfig.getId()
...
memberRightTemplateImplService
.remove(new QueryWrapper<MemberRightTemplateImpl>()
.eq("show_config_id", showConfigId));
}
问题分析:
猜想1:因事务导致的批量插入不返回主键
猜想验证:
取消事务进行插入后,仍出现主键不返回的相同问题