2012-04-13 66 views
1

我有一個實體的字符串屬性,這是其他實體經常重複 - 這將(傳統數據庫)映射到自己的表。標準化重複值在休眠 - Java

例如:我可以有一個服裝實體,每件衣服都有自己的對象或行。每件商品都會有一個品牌,但這個品牌(字符串)可能會被許多其他服裝商品重複使用。 - 它本質上應該是一個manyToOne映射,儘管品牌本身並不是一個實體,它只是一個String。

我該如何做到這一點在冬眠?或者我應該爲每個品牌創建一個實體並使用ManyToOne?

任何幫助將不勝感激!

回答

1

我認爲,就database normalization(最具體地說是3NF)而言,如果您希望某列具有重複值,那麼應該將這些值導出到它們自己的表中並且有一個外鍵列。這樣,如果其中一個值發生了變化,您可以一次更改所有值。

這將允許您在Hibernate中使用ManyToOne。

但是,如果這是不可能的,我會建議使用Enum

+0

如果使用枚舉,每次添加新品牌時都必須更新代碼。給一個品牌它自己的實體可能會更有意義。 – 2012-04-13 18:58:52

+0

'ɲeuroburɳ'說的是真的,枚舉不是一個好選擇。到目前爲止,我將使用ManyToOne,儘管我希望與嵌入在實體中的值類型(可嵌入)對象關聯的解決方案。 – user1260191 2012-04-15 12:28:37

+0

我會同意關於枚舉。規範化數據庫本身是一個更好的選擇。我也想過嵌入式對象,但它似乎不適用於您的問題。 [Embedded entites](http://schuchert.wikispaces.com/JPA+Tutorial+1+-+Embedded+Entity)用於處理多列,就好像它們是封閉實體所擁有的單獨對象一樣。這不是你問的。 – 2012-04-15 17:39:49