2009-06-24 81 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