2015-10-26 86 views
0

有沒有辦法告訴Hibernate首先檢查由表生成器生成的當前主鍵是可用還是過時?休眠:更新表生成器

我有一個應用程序使用休眠在我的數據庫中的幾個表中創建新的條目,但有時這些生成的值已過時並已被使用。發生這種情況是因爲這個數據庫被很多應用程序和腳本所使用,其中一些使用「選擇MAX(ID)+1」 - 「生成」策略「。這並不是一個真正的選擇,可以將所有其他組件改爲使用表生成器(儘管它可以解決問題),所以我必須確保從表生成器獲得的值真的可用。

有沒有什麼辦法可以告訴Hibernate在嘗試向數據庫中插入新記錄(並拋出ConstraintViolationException)之前檢查生成的值的有效性? 或者,有沒有辦法在hibernate使用它們生成新的ID之前手動更新生成器表?

最明顯的方法是運行像UPDATE pk_generator SET value=(SELECT MAX(ID)+1 from members) WHERE column='members'

回答

0

本機查詢當您保存對象與saveOrUpdate()與自動生成的ID,如果它是一個創建操作的對象ID字段將得到更新。以便它永遠不會與已經生成和使用的id相沖突。