当前使用版本(必填,否则不予处理)
3.1.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
数据库字段类型bigint(20),实际填充19位数字,javaBean id类型位Long,调用findById报错,调用保存方法同时修改到多条记录。这多条记录都是连续的19位数字,间隔都是1.
重现步骤(如果有就写完整)
如上
报错信息
查询到多条,报错。调用saveOrUpdate修改了多条。
Comment From: saaserp
建议检查一下这个框架的精度识别问题。Long 19位长度的连续id识别不了。
Comment From: qmdx
首先你用的是默认的 idWorker 雪花算法还是自定义?自增? 修改多条记录你需要查看的是你的 sql 是否正确,执行逻辑是否对,如果还是未解决请给出你的重现 demo
Comment From: saaserp
用的是默认的。idWorker
Comment From: qmdx
用的是默认的。idWorker
请给出你的重现问题 demo
Comment From: saaserp
数据库里面有两条记录,id是,1275628762268045312,1275628762268045313 javabean ID是 @TableId(value = "ID", type = IdType.ID_WORKER) @JSONField(serializeUsing = ToStringSerializer.class) private Long id; 然后调用框架的 getById(1275628762268045312)方法,查询到了1275628762268045312,1275628762268045313两条记录。 obj的id是1275628762268045312 然后调用saveOrUpdate(obj)方法,同时修改了两条记录。
Comment From: saaserp
复现的前提是: javabean ID是 @TableId(value = "ID", type = IdType.ID_WORKER) @JSONField(serializeUsing = ToStringSerializer.class) private Long id;
条件是 高并发产生的两个连续的id,影响结果如上描述
Comment From: qmdx
@wcgh
然后调用框架的 getById(1275628762268045312)方法,查询到了1275628762268045312,1275628762268045313两条记录。
打印 SQL 出来到 navicat 之类客户端执行看看效果,不应该取到 2 条记录的
Comment From: saaserp
在客户端执行 select * from ck_order where id=1275628762268045312 出现两条记录 我用的dbeaver 客户端本身也存在问题。。
Comment From: saaserp
加单引号查询只有一条。不加单引号出现两条
Comment From: qmdx
在客户端执行 select * from ck_order where id=1275628762268045312 出现两条记录 我用的dbeaver 客户端本身也存在问题。。
那这就不是 MP 的问题了,你需要看看你的数据库为什么会存在这种问题
Comment From: saaserp
跟数据库没有关系吧,数据库自身可以记录这两个id, 是客户端以及mp疑似都有类似的缺陷,无法识别19位的连续的Long