mysql - MySQL/Hibernate 中的重复条目错误

标签 mysql hibernate duplicates

我遇到了以下问题,但找不到合适的解决方案。我有一个带有属性 id、x(外键)、y(序列号)和 z(内容)的关系 A。此外,x-y 还存在唯一性约束。通常我有像 (455, 159, 1, ...), (456, 159, 2, ...), (457, 159, 3, ...) 等元组。我正在使用 Hibernate这就是某个类的映射表。现在我有一个用例,我想插入一个新对象,或删除一个已经存在的对象并更新其他对象的序列号。例如,如果我在 1 之后插入一个新对象,它应该得到序列号 2,随后先前为 2 的对象应该变成 3,3 应该变成 4,等等。删除对象 2 - 旧的 3 时应该会发生类似的情况然后应该变成 2,等等。

但是,当触发更新时,我收到 ConstraintViolationException。

严重:无法将数据库状态与 session 同步 org.hibernate.exception.ConstraintViolationException:无法执行 JDBC 批量更新 ... 引起原因:java.sql.BatchUpdateException:键 2 的重复条目“159-2”

我无法解释为什么会发生这种情况。没有提交/ session 刷新,所以我认为 Hibernate/MySQL 将能够处理时间不一致并检查提交的约束。我是否遗漏了什么,或者如果没有主要的解决方法,真的没有办法做到这一点?

干杯

最佳答案

一些 id 生成器需要直接访问数据库来获取 id。

例如,在 MySQL 上使用带有自动增量列的 native 生成器,当您调用 save() 时,它将执行插入并检索 id,即使您没有这样做提交了 session 。

尝试迁移到 Hibernate 管理的生成器。

关于mysql - MySQL/Hibernate 中的重复条目错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1037853/

相关文章:

mysql - 如何将动态列名传递给 MySql 中的函数参数?

mysql - 在一次查询调用中计算同一张表中多列的中位数

java - Hibernate 从onetomany 中检索列表

linq - C# LINQ 在列表中查找重复项

Select 查询中的 MySQL 小计和总计

java - 使用 MS SQL hibernate

java - 改进的命名策略 Hibernate 4 不起作用

php - MySQL 增量并避免不正确的引用

c# - 如何在保存前检查重复项?

java - 不使用hibernate从多个映射表获取数据