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

3.5.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

目前就是最新版了,saveBatch的问题,实体的主键id是自增长的,但是saveBatch时,设置了id,saveBatch成功后,再看list数据,里面的id错乱了,从第二条开始就不正确了。检查出问题是因为jdbc url 后面增加了&rewriteBatchedStatements=true,如果去掉该配置,则可以达到预期,但是saveBatch本质上还是单条插入有效率问题。

重现步骤(如果有就写完整)

前提:jdbc url 后面要有&rewriteBatchedStatements=true,然后表主键也是自增id,实体entity里面的id属性也增加了@TableId(type = IdType.AUTO)注解,然后初始化list 12条数据,设置按顺序设置id, 2164733399670057273 2164733399670057274 2164733399670057275 2164733399670057276 2164733399670057277 2164733399670057278 2164733399670057279 2164733399670057280 2164733399670057281 2164733399670057282 2164733399670057283 2164733399670057284 然后调用saveBatch保存,打印的sql 日志,参数都是正确的,都是带id的,执行结束后,再看list中实体对象的id,变成了如下: 2164733399670057273 2164733399670057280 2164733399670057281 2164733399670057282 2164733399670057283 2164733399670057284 2164733399670057285 2164733399670057286 2164733399670057284 2164733399670057285 2164733399670057286 2164733399670057287 每次都特别规律,第一条id正确,第二条开始发生偏差,相差6,然后最后几条开始重复。

报错信息

没有报错,但是list中的id很奇怪

Comment From: miemieYaho

batch是用的mybatis的东西

Comment From: qmdx

雪花算法里面混有时间戳,非绝对的顺序,只要不重复都是正常现象。

Comment From: luweiwei2222

雪花算法里面混有时间戳,非绝对的顺序,只要不重复都是正常现象。

不是这样子的,我这个只是自增id初始值很大很大,并不是雪花算法,本质上就是自增序列,但是我设置了id,应该批量保存后不要给我再回填id回来,但是实际上又把我之前设置的id覆盖了,但是覆盖的是错的,并且存在重复

Comment From: qmdx

雪花算法里面混有时间戳,非绝对的顺序,只要不重复都是正常现象。

不是这样子的,我这个只是自增id初始值很大很大,并不是雪花算法,本质上就是自增序列,但是我设置了id,应该批量保存后不要给我再回填id回来,但是实际上又把我之前设置的id覆盖了,但是覆盖的是错的,并且存在重复

你检查下你是不是存在并发批量插入方法情况,或者其它可能存在的问题,你可以写一个 demo 来重新你这个问题,如果可以重现你提交 demo 过来重新开一个 issue

Comment From: isMrZhang

saveBatch自增ID,代码中设置了id后,执行后id被替换成错误的(使用了rewriteBatchedStatements=true)这个问题到底解决没有