MySQL / Hibernate中的重复输入错误

时间:2009-06-24 11:46:21

标签: mysql hibernate duplicates

我遇到以下问题,无法找到合适的解决方案。我有一个关系A与属性id,x(外键),y(序列号)和z(内容)。此外,对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将能够处理时间不一致,并将检查提交的约束。有什么我想念的,或者如果没有重大的解决方法,真的没办法做到这一点吗?

干杯

1 个答案:

答案 0 :(得分:1)

有些id生成器需要直接进入DB才能获得id。

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

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