【问题标题】:Duplicate entry error in MySQL/HibernateMySQL/Hibernate 中的重复输入错误
【发布时间】:2009-06-24 11:46:20
【问题描述】:

我面临以下问题,找不到合适的解决方案。我与属性 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。

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

干杯

【问题讨论】:

    标签: mysql hibernate duplicates


    【解决方案1】:

    有些 id 生成器需要直接去 DB 获取 id。

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

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

    【讨论】:

    • 好的 - 有一点误解。我的错:关系有另一个自动生成的 ID 属性。外键/序列号只有这个额外的唯一性约束。
    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 2011-11-10
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多