2012-08-08 86 views
1

我是新來的休眠,我面臨一個奇怪的問題。 我使用的是Hibernate 2.0,自從最近兩天以來一直堅持這個問題。由於「增量」而獲得「唯一鍵約束違規」

我有一個表格,它有2個表格,借貸。每個將保存多個條目。每個條目將作爲單獨的記錄存儲在表格中。來自兩個表的數據將存儲在同一個表中。 我已經做了一個「ID」字段作爲表的主鍵,並配置爲自動增量。

<id column="ID" name="id"> 
<generator class="increment"/> 
</id> 

當我第一次提交時,我將條目存儲在工作正常的表中。自動增量在當時效果很好。 在更新操作中,由於某些業務邏輯,我從數據庫表中刪除與每個表相關的所有條目,並再次輸入新記錄。這裏問題開始了。

我將說明確切的情況用一個例子: 我有2項借方和貸方每個具有ID爲1 &分別爲2和3 & 4。現在在更新操作中,我先刪除借記記錄(即ID 1 & 2)並提交更改。提交後,我嘗試插入一組新的記錄借記。理想情況下,它應該從表中選擇最大ID併爲新記錄生成下一個ID(即5 & 6),但它會給出「唯一鍵約束違規」錯誤。

任何人都可以在這個問題上指導?有沒有人遇到過類似的問題? 任何指針將非常感激。

問候, 阿希什

+0

您可以顯示正在執行此操作的代碼,以便我們看到如何「提交」更改?你也許想看看使用'sequence'而不是'increment'(更安全,並使用數據庫序列而不是在JVM內跟蹤ID)。 – MattR 2012-08-08 04:41:09

+0

您的建議最適合我。萬分感謝。 – 2013-10-03 13:08:48

回答

1

嘗試使用本地密鑰生成:

<id column="ID" name="id"> 
    <generator class="native"/> 
</id> 

如果你的數據庫的表已設置爲自動遞增的主鍵ID的,然後它會用Hibernate的汽車發生衝突增量發生器。

0

確保你的表ID字段設置爲自動增量,然後你應該改變喜歡這個;

 <id column="ID" name="id"> 
    <generator class="identity"/> 
    </id>