gpt4 book ai didi

java - hibernate + "ON DUPLICATE KEY"逻辑

转载 作者:可可西里 更新时间:2023-11-01 06:49:18 25 4
gpt4 key购买 nike

我正在寻找一种方法来保存或更新记录,根据由几列组成的表的唯一键)。

我想实现 INSERT ... ON DUPLICATE KEY UPDATE 使用的相同功能 - 意味着盲目地保存记录,并让 DB/Hibernate 插入新记录,或更新现有记录如果唯一键已经存在,则为一个。

我知道我可以使用 @SQLInsert( sql="INSERT INTO .. ON DUPLICATE KEY UPDATE"),但我希望不要自己编写 SQL,而让 Hibernate 来完成这项工作。 (我假设它会做得更好——否则为什么要使用 Hibernate?)

最佳答案

当您尝试插入打破约束(包括唯一约束)的行时,Hibernate 可能会抛出 ConstraintViolationException。如果你没有得到那个异常,你可能会得到一些其他一般的 Hibernate 异常——这取决于 Hibernate 的版本和 Hibernate 将 MySQL 异常映射到你正在使用的数据库版本和类型中的 Hibernate 异常的能力(我还没有对所有内容进行测试)。

您只会在调用 flush() 后得到异常,因此您应该确保这也在您的 try-catch block 中。

我会小心实现先检查该行是否存在的解决方案。如果多个 session 同时更新表,您可能会遇到竞争条件。两个进程几乎同时读取该行以查看它是否存在;他们都检测到它不存在,然后他们都尝试创建一个新行。一个人会失败,这取决于谁赢得了比赛。

更好的解决方案是先尝试插入,如果失败,则假设它已经存在。但是,一旦出现异常,您将不得不回滚,因此这将限制您使用此方法的方式。

关于java - hibernate + "ON DUPLICATE KEY"逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com