我面临以下问题,找不到合适的解决方案。我有一个属性为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能够处理时间上的不一致并检查提交的约束。如果没有重大的解决方法,我有什么想念的吗?或者真的没有办法吗?
干杯
最佳答案
一些ID生成器需要直接进入数据库以获取ID。
例如,在调用native
时,在MySQL上将save()
生成器与AUTOINCREMENT列一起使用,即使您尚未提交会话,它也会执行插入并检索ID。
尝试移至Hibernate管理的生成器。
关于mysql - MySQL/Hibernate中的重复输入错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1037853/