2009-01-29 57 views
1

是否有可能在休眠有一個實體,其中一些ID分配和一些生成?休眠和身份證

例如:

一些對象具有被數據庫的外部產生1-10000之間的ID;而一些實體沒有ID而需要由數據庫生成的ID。

回答

1

您可以使用'assigned'作爲Id生成策略,但是在將其保存到數據庫之前,必須先爲該實體提供其id。或者,您可以構建自己的org.hibernate.id.IdentifierGenerator實現,以您所建議的方式提供Id。

雖然我必須同意w/Cade Roux,並且這樣做似乎比使用內置增量,uuid或其他形式的id代更困難。

1

我會避免這種情況,並簡單地有一個關於對象的來源和外部標識符的列(假設外部標識符是一個重要的價值,你想跟蹤)的信息的輔助列。

將列用於混合目的通常是一個壞主意 - 在這種情況下,從代理鍵的性質推斷出對象的來源。

1

使用你喜歡的任何發生器,確保它可以從一個偏移量開始(當你使用一個序列時,你可以相應地初始化它)。

對於所有其他實體,請在插入它們之前調用setId()。如果id屬性爲0,Hibernate將只生成一個id。注意,你應該首先將帶有id的對象插入到db中,然後使用它們。 Hibernate中有很多代碼,當id!= 0時,預計該對象位於數據庫中。

另一種解決方案是對帶有id的實體使用負號。這也將確保在插入新對象時不會發生衝突。