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()));
        }
相关文章
|
7天前
|
前端开发 Java API
SpringBoot整合Flowable【06】- 查询历史数据
本文介绍了Flowable工作流引擎中历史数据的查询与管理。首先回顾了流程变量的应用场景及其局限性,引出表单在灵活定制流程中的重要性。接着详细讲解了如何通过Flowable的历史服务API查询用户的历史绩效数据,包括启动流程、执行任务和查询历史记录的具体步骤,并展示了如何将查询结果封装为更易理解的对象返回。最后总结了Flowable提供的丰富API及其灵活性,为后续学习驳回功能做了铺垫。
18 0
SpringBoot整合Flowable【06】- 查询历史数据
|
1天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
48 17
Spring Boot 两种部署到服务器的方式
|
3月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
299 2
|
7天前
|
存储 前端开发 Java
SpringBoot整合Flowable【05】- 使用流程变量传递业务数据
本文介绍了如何使用Flowable的流程变量来管理绩效流程中的自定义数据。首先回顾了之前的简单绩效流程,指出现有流程缺乏分数输入和保存步骤。接着详细解释了流程变量的定义、分类(运行时变量和历史变量)及类型。通过具体代码示例展示了如何在绩效流程中插入全局和局部流程变量,实现各节点打分并维护分数的功能。最后总结了流程变量的使用场景及其在实际业务中的灵活性,并承诺将持续更新Flowable系列文章,帮助读者更好地理解和应用Flowable。 简要来说,本文通过实例讲解了如何利用Flowable的流程变量功能优化绩效评估流程,确保每个环节都能记录和更新分数,同时提供了全局和局部变量的对比和使用方法。
33 0
|
2月前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
83 9
|
2月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
64 2
|
3月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
117 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
2月前
|
存储 easyexcel Java
SpringBoot+EasyExcel轻松实现300万数据快速导出!
本文介绍了在项目开发中使用Apache POI进行数据导入导出的常见问题及解决方案。首先比较了HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook三种传统POI版本的优缺点,然后根据数据量大小推荐了合适的使用场景。接着重点介绍了如何使用EasyExcel处理超百万数据的导入导出,包括分批查询、分批写入Excel、分批插入数据库等技术细节。通过测试,300万数据的导出用时约2分15秒,导入用时约91秒,展示了高效的数据处理能力。最后总结了公司现有做法的不足,并提出了改进方向。
|
3月前
|
druid Java Maven
|
3月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
287 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。