1、检查数据库的段alastupdatetime定义
检查是否是下面这样的alastupdatetime
timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后修改时间'
2、检查.xml的alastupdatetime
2.1、检查alastupdatetime是放在最后
2.2、检查alastupdatetime是否在前面重复出现
insert into bs_test
(
aid, anumber, aorganizationid, alastupdatetime
)
values
<foreach item="item" collection="list" separator=",">
(
#{item.aid,jdbcType=INTEGER},
#{item.anumber,jdbcType=VARCHAR},
#{item.organization.aid,jdbcType=INTEGER},
#{item.alastupdatetime,jdbcType=TIMESTAMP}
)
</foreach>
ON DUPLICATE KEY UPDATE
aid = if(alastupdatetime = VALUES(alastupdatetime),VALUES(aid), aid),
anumber = if(alastupdatetime = VALUES(alastupdatetime),VALUES(anumber), anumber),
aorganizationid = if(alastupdatetime = VALUES(alastupdatetime),VALUES(aorganizationid), aorganizationid),
alastupdatetime = if(alastupdatetime = VALUES(alastupdatetime),now(3), alastupdatetime)
3、要更新数据的主键是否在同一个updateByBatch中的List中重复出现
这个错误是最难排查的,因为所有的语法都没有错,很难想像是因为数据问题。
这里主要判断更新的主键是否在更新的List重复存在,如果同时出现了两次也会出现这样的错误。
3.1、建议写法
然后在最后的更新里面再转一下:
if(updateInventoryDetailMap.size() > 0) {
updateByBatch(context, updateInventoryDetailMap.values().stream().collect(Collectors.toList()));
}