当前使用版本(必填,否则不予处理)

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