spring 批次大小不为1的BatchUpdateException

pkln4tw6  于 2023-09-29  发布在  Spring
关注(0)|答案(1)|浏览(138)

我们最近更新了我们的数据库到mariadb 10,但自从更新后,我得到一个错误,当我试图插入到数据库,与重复的错误条目上的一个我们唯一的关键字约束,我使用在我的sql脚本中的复制键.
对于插入,我使用了一个扩展BatchSqlUpdate的类,但在该类中,我只设置了数据源、插入SQL、批处理大小= 100,并使用declareParameter()设置SQL参数。
然而,我们发现了一个变通办法,如果我们改变批量大小1,代码工作得很好,所以我认为这可能不是由我的代码引起的,但我们需要一个适当的解决方案,我没有办法了。
目前我用途:

  • Mariadb 10.11.4,在Docker容器中的服务器上运行
  • 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或更高版本,其他更改也没有给我带来任何结果。
我想知道什么是错误。如果它是由数据库或依赖项或其他原因引起的。

huwehgph

huwehgph1#

这是MariaDB中的一个错误,最初在Stack Overflow上报告,不幸的是仍未修复。
子选择始终返回相同的值(请参见MDEV-30523中的示例),这会导致您的案例出现重复键错误。
MariaDB Bugtracker:MDEV-30523

相关问题