栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Seata和shardingsphere集成使用时遇到-io.seata.common.exception.ShouldNeverHappenException

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Seata和shardingsphere集成使用时遇到-io.seata.common.exception.ShouldNeverHappenException

集成shardingsphere时,由于对表做了分表,所以主键id设置为非自增的主键。当在java代码中执行insert逻辑时,原计划是shardingsphere设置的雪花算法生成的id代替了mysql的自增主键。没有集成seata时是没问题的,但是集成seata后,进入seata代码逻辑时,会先获取主键是哪个字段,然后再判断主键是否自增,如果不是自增的那就会抛一个ShouldNeverHappenException。

以下为seata代码的逻辑

代码执行的类:

io.seata.rm.datasource.exec.mysql.MySQLInsertExecutor

containsPK源码:

 解决办法:在mapper.xml文件中直接写sql,且需要带上主键字段,然后在执行插入sql之前,在java代码中需要手动生成一个id,set到主键id字段。如上图1,这个时候,containsPK返回的是true,然后会执行下图中代码:

getPkValuesByColumn()方法中会识别到主键字段,并且拿到主键值,按照正确业务逻辑往下执行。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684586.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号