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()));
        }
相关文章
|
9天前
|
XML Java Nacos
Spring Boot 整合Nacos 版本兼容适配 史上最详细文档
本文介绍SpringBoot整合Nacos的完整流程,涵盖Nacos下载安装、配置中心与服务发现集成、版本兼容性问题及实战配置。重点解决SpringBoot 3.3.0与Nacos版本适配难题,推荐使用Spring Cloud Alibaba方案,并提供项目开源地址供参考学习。
|
2月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
301 0
|
7月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
101 0
|
7月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——封装统一返回的数据结构
本文介绍了在Spring Boot中封装统一返回的数据结构的方法。通过定义一个泛型类`JsonResult&lt;T&gt;`,包含数据、状态码和提示信息三个属性,满足不同场景下的JSON返回需求。例如,无数据返回时可设置默认状态码&quot;0&quot;和消息&quot;操作成功!&quot;,有数据返回时也可自定义状态码和消息。同时,文章展示了如何在Controller中使用该结构,通过具体示例(如用户信息、列表和Map)说明其灵活性与便捷性。最后总结了Spring Boot中JSON数据返回的配置与实际项目中的应用技巧。
545 0
|
7月前
|
JSON Java fastjson
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——使用 fastJson 处理 null
本文介绍如何使用 fastJson 处理 null 值。与 Jackson 不同,fastJson 需要通过继承 `WebMvcConfigurationSupport` 类并覆盖 `configureMessageConverters` 方法来配置 null 值的处理方式。例如,可将 String 类型的 null 转为 &quot;&quot;,Number 类型的 null 转为 0,避免循环引用等。代码示例展示了具体实现步骤,包括引入相关依赖、设置序列化特性及解决中文乱码问题。
330 0
|
7月前
|
JSON Java fastjson
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——Spring Boot 默认对Json的处理
本文介绍了在Spring Boot中返回Json数据的方法及数据封装技巧。通过使用`@RestController`注解,可以轻松实现接口返回Json格式的数据,默认使用的Json解析框架是Jackson。文章详细讲解了如何处理不同数据类型(如类对象、List、Map)的Json转换,并提供了自定义配置以应对null值问题。此外,还对比了Jackson与阿里巴巴FastJson的特点,以及如何在项目中引入和配置FastJson,解决null值转换和中文乱码等问题。
949 0
|
3月前
|
JSON Java 数据格式
Spring Boot返回Json数据及数据封装
在Spring Boot中,接口间及前后端的数据传输通常使用JSON格式。通过@RestController注解,可轻松实现Controller返回JSON数据。该注解是Spring Boot新增的组合注解,结合了@Controller和@ResponseBody的功能,默认将返回值转换为JSON格式。Spring Boot底层默认采用Jackson作为JSON解析框架,并通过spring-boot-starter-json依赖集成了相关库,包括jackson-databind、jackson-datatype-jdk8等常用模块,简化了开发者对依赖的手动管理。
389 3
|
9月前
|
人工智能 安全 Dubbo
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
3814 109
|
9月前
|
存储 NoSQL Java
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
193 21