批量大小不是 1 时出现 BatchUpdateException

问题描述 投票:0回答:1

我们最近将数据库更新为 mariadb 10,但自从更新后,当我尝试插入数据库时出现错误,在我们的唯一键约束之一上出现重复条目错误,并且我在我的数据库中使用 ON DUPLICATE KEY SQL 脚本。

对于插入,我使用一个扩展 BatchSqlUpdate 的类,但在该类中我只设置数据源、插入 sql、批量大小 = 100 并使用 declareParameter() 设置 sql 参数。

但是,如果我们更改批量大小 1,我们找到了解决方法,代码可以完美运行,所以我认为这可能不是由我的代码引起的,但我们需要一个正确的解决方案,而我没有想法。

目前我使用:

  • 在 Docker 容器中的服务器上运行的 Mariadb 10.11.4
  • mariadb-java-client 3.0.8
  • spring-jdbc 5.3.28
  • spring-data-jpa 2.5.7
INSERT INTO table(ldb, lid, scid, sid, valid)
VALUES(?, ?, (SELECT id FROM cserver WHERE ldb=? AND lid=?), ?, 1)
ON DUPLICATE KEY id=LAST_INSERTED_ID(id),
ldb=?, lid=? scid=(SELECT id FROM cserver WHERE ldb=? AND lid=?), sid, valid=1;

我尝试通读代码并进行调试。有些建议说这可能是由库引起的,所以我尝试更改一些依赖项,但我无法将 spring-jdbc 版本更改为 6 或更高版本,并且其他更改没有给我带来任何结果。

我想知道错误是什么。如果它是由数据库或依赖项或其他原因引起的。

sql spring maven jdbc mariadb
1个回答
0
投票

这是 MariaDB 中的一个错误,最初是在 stackoverflow 上报告的,不幸的是仍未修复:-(

子选择始终返回相同的值(请参阅 MDEV-30523 中的示例),这会导致您的情况出现重复键错误。

MariaDB Bugtracker:MDEV-30523

© www.soinside.com 2019 - 2024. All rights reserved.