0

我面临以下问题,找不到合适的解决方案。我与属性 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 将能够处理时间不一致并将检查提交的约束。有什么我遗漏的吗,或者如果没有主要的解决方法,真的没有办法做到这一点吗?

干杯

4

1 回答 1

1

一些 id 生成器需要直接到 DB 获取 id。

例如native,当你调用它时在 MySQL 上使用带有 AUTOINCREMENT 列的生成器save()将执行插入并检索 id,即使你没有提交会话。

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

于 2009-06-24T11:54:51.560 回答