You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.7升级后Hibernate批量更新触发主键重复约束异常

Spring Boot 2.5 迁移至2.7后批量更新触发主键重复异常问题

问题现象

将Spring Boot从2.5版本迁移到2.7版本后,系统偶尔会抛出SQLIntegrityConstraintViolation主键重复异常。调试发现,当尝试批量更新15条记录时,某一条记录会被重复更新14-15次,导致负责将数据同步到h_instance表的数据库触发器触发主键重复校验错误。

触发场景

触发异常的是一个常规业务方法:

  1. 根据指定的rateId和locationId查询Instance记录
  2. 修改记录字段后调用instanceRepo.saveAll()批量保存
  3. 每次处理的记录数在5-100条之间,传入的rateIds是Set集合,不存在重复值

特殊情况:使用单条save()保存,或者将hibernate.jdbc.batch_size设置为1时,不会出现该异常。

环境信息

  • Hibernate版本:5.6.15_Final
  • MariaDB版本:10.6
  • Spring Boot版本:2.7
  • MariaDB JDBC客户端版本:3.3.3

已配置内容与数据库触发器

Hibernate批量更新配置

已开启以下批量相关属性:

  • hibernate.order_inserts=true
  • hibernate.order_updates=true
  • hibernate.jdbc.batch_size=20

数据库触发器

数据库中存在两类触发器:

  • 前置触发器:更新ATTRCHANGEID字段为UUID
  • 后置触发器:将数据插入t_datalog表

日志排查结果

查看Hibernate日志,仅生成了一条针对异常rateId的更新语句,但数据库触发器却检测到该记录被重复更新。

内容的提问来源于stack exchange,提问作者Rudy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:17:07