我面临以下问题,找不到合适的解决方案。我与属性 id、x(外键)、y(序列号)和 z(内容)有一个关系 A。此外,xy 存在唯一性约束。那通常是我有像 (455, 159, 1, ...), (456, 159, 2, ...), (457, 159, 3, ...) 等元组。我正在使用 Hibernate那就是某个类的映射表。现在我有了一个用例,我想插入一个新对象,或者删除一个已经存在的对象并更新其他对象的序列号。例如,如果我在 1 之后插入一个新对象,它应该得到序列号 2,随后之前是 2 的对象应该变成 3,3 应该变成 4,等等。删除对象 2 时也会发生类似的事情 - 旧的 3然后应该变成2,等等。
但是,当触发更新时,我会收到 ConstraintViolationException。
SEVERE: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
...
Caused by: java.sql.BatchUpdateException: Duplicate entry '159-2' for key 2
我无法完全解释为什么会发生这种情况。没有提交/会话刷新,所以我认为 Hibernate/MySQL 将能够处理时间不一致并将检查提交的约束。有什么我遗漏的吗,或者如果没有主要的解决方法,真的没有办法做到这一点吗?
干杯