2009-06-24 78 views
0

我面临以下问题,无法找到合适的解决方案。我有属性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等。MySQL /休眠中出现重复输入错误

但是,当触发更新时,我得到一个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

某些id生成器需要直接到数据库获取id。

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

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

+0

好的 - 有一点误会。我的坏:关系有另一个自动生成的ID属性。对外键/序列号只有这个额外的唯一性约束。 – VHristov 2009-06-24 12:24:43