2013-02-20 44 views
0

我有一個有幾列的表。主鍵是id,自動生成。休眠:如果還沒有在表中保存

考慮以下代碼,它可以執行不止一次:

session.save(x); 

對象x具有相同的內容,說如果我們不作任何修改運行程序的兩倍。結果,該對象在表格中出現兩次,其中有不同的id s。

如何修改此代碼以避免重複插入?

我認爲使用session.get,但這需要知識id

我還考慮設置x以外的其他所有字段的標準,但這是要求麻煩:有一天我會添加另一列,並忘記將其添加到條件。有沒有一個很好的解決方案?

回答

1

如果你做一個

YourObject cachedX = (YourObject)session.merge(x); 

cachedX現在有生成的ID。顯然你必須保持它,你很可能仍然需要提出重複規則。

+0

生成的id是什麼?表中可能已經或可能沒有'x'。你可以分解它:如果第一次插入「x」,那麼'id'會是什麼?第二次? – user443854 2013-02-20 22:56:45

+1

hibernate中的合併方法定義如下: 「將給定對象的狀態複製到具有相同標識符的持久對象上,如果當前沒有與會話相關聯的持久實例,則它將被加載,如果給定實例未保存,保存副本並將其作爲新的持久實例返回。「 – 2013-02-21 01:22:27

+0

謝謝,您評論中的解釋非常清楚。但是我仍然在猜測「顯然你必須保持它,你很可能仍然需要提出重複規則」。你能解釋一下你的意思嗎?更好的是,更新答案。 – user443854 2013-02-21 13:39:08