簡體   English   中英

Hibernate映射具有空值的復合鍵

[英]Hibernate mapping a composite key with null values

使用Hibernate,您是否可以創建一個復合ID,其中您映射到ID的其中一列可以具有空值?

這是為了處理具有唯一鍵的舊表,該鍵可以具有空值但沒有主鍵。

我意識到我可以在表中添加一個新的主鍵列,但我想知道是否有任何方法可以避免這樣做。

不可以。主鍵不能為空。

不幸的是,沒有。 我要么必須使用解決方法:

我使用composit Id作為視圖(!not table),其中行可以由2個cols確切地標識(A,B)。 雖然其中一個col(B)可以具有空值以及正整數。 所以我的解決方法是我在視圖中創建了一個新的col:“BKey”,我的視圖被寫成好像B為null,然后BKey的值為-1,否則BKey = B.(B中只有正整數出現並且為null)。 我還改變了我的composit id實現,使用BKey代替B.希望它對某些人有幫助..

您不會收到錯誤,但Hibernate無法將復合列的NULL值映射到您的實體。 這意味着您在結果中獲得具有NULL值的實體。

你為什么想這么做? 您的復合ID應該映射表的主鍵,將空值放入鍵中聽起來不明智,是嗎?

編輯: Hibernate不允許這樣做; 您可以將該屬性放在密鑰之外並稍微調整DAO,以便在必要時考慮該字段

這是不可取的。 您可以使用視圖並映射嗎? 如果您遇到遺留數據,可以使用COALESCE提供默認值。 我們在使用復合鍵時遇到了很多麻煩,我想零值會導致更多問題。

對於復合鍵(假設數據庫允許PK中的空值),您可以擁有包含空值的最大number_of_cols ^ 2 - 1個條目(例如,對於2列的復合鍵,您可以在其主鍵中具有3行null,第四個是PK沒有空值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM