我遇到了以下问题,但找不到合适的解决方案。我有一个带有属性 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/