Spring boot 使用 ON DUPLICATE KEY UPDATE属性控制版本 更新数据不成功

简介: 如果更新不成功会报下面的错误(此错误是自定义的):The data you want to update has been updated by another user. Please reopen and try again!一、主要按下面的流程检查:1、检查数据库的段alastupdatetime定义2、检查.xml的alastupdatetime3、要更新数据的主键是否在同一个updateByBatch中的List中重复出现

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、建议写法
image.png
然后在最后的更新里面再转一下:
if(updateInventoryDetailMap.size() > 0) {

            updateByBatch(context, updateInventoryDetailMap.values().stream().collect(Collectors.toList()));
        }
相关文章
|
1天前
|
前端开发 Java 程序员
Spring Boot统一功能处理(拦截器, 统一数据返回格式, 统一异常处理)
Spring Boot统一功能处理(拦截器, 统一数据返回格式, 统一异常处理)
10 1
|
1天前
|
JavaScript Java 测试技术
基于小程序的个人健康数据管理系统+springboot+vue.js附带文章和源代码设计说明文档ppt
基于小程序的个人健康数据管理系统+springboot+vue.js附带文章和源代码设计说明文档ppt
6 0
|
5天前
|
SQL Java 关系型数据库
基于SpringBoot使用MyBatisPlus,MyBatisPlus标准数据层开发(CRUD)、MyBatisPlus分页功能的使用
基于SpringBoot使用MyBatisPlus,MyBatisPlus标准数据层开发(CRUD)、MyBatisPlus分页功能的使用
15 2
|
13天前
|
SQL Java 调度
SpringBoot使用@Scheduled定时任务录入将要过期任务数据
SpringBoot使用@Scheduled定时任务录入将要过期任务数据
|
14天前
|
前端开发 关系型数据库 MySQL
SpringBoot-----从前端更新数据到MySql数据库
SpringBoot-----从前端更新数据到MySql数据库
23 1
|
14天前
|
SQL Java 数据库
springboot用户创建的业务数据只能是同一组织能看的见
springboot用户创建的业务数据只能是同一组织能看的见
|
14天前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
30 0
|
14天前
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。
|
14天前
|
SQL Java 数据库连接
Springboot框架整合Spring Data JPA操作数据
Spring Data JPA是Spring基于ORM和JPA规范封装的框架,简化了数据库操作,提供增删改查等接口,并可通过方法名自动生成查询。集成到Spring Boot需添加相关依赖并配置数据库连接和JPA设置。基础用法包括定义实体类和Repository接口,通过Repository接口可直接进行数据操作。此外,JPA支持关键字查询,如通过`findByAuthor`自动转换为SQL的`WHERE author=?`查询。
|
前端开发 Java 数据安全/隐私保护
【SpringBoot 2】(八)数据响应 页面响应(二)
【SpringBoot 2】(八)数据响应 页面响应(二)
157 0