2013-10-19 76 views
2

使用JPA(休眠)我想實現下面的關係,想知道如果別人有關於最好的方法有什麼建議:JPA父/子關係

@Entity(name="SOMETHING") 
public class Something { 
    List<MetaDatum> metaData; 
} 

@Entity(name="SOMETHING_COMPLETELY_DIFFERENT") 
public class SomethingCompletelyDifferent { 
    List<MetaDatum> metaData; 
} 

@Entity(name="META") 
public class MetaDatum { 

} 

基本上它是n完全不相關的對象,每個有一個共同的孩子對象的集合;在對象模型中簡單實現,在數據庫中稍微麻煩一點!

我相信這肯定是一種常見現象,但是我很難找到任何示例實現,因爲我不知道正確的搜索術語。

謝謝你的時間!

回答

2

貌似爲@OneToMany註釋在您SomethingSomethingCompletelyDifferentSCD)實體metaData領域的情況。你從那裏去哪裏取決於。

由於SomethingSCD沒有一個共同的祖先,你不能簡單地使雙向關係,並使用一個連接列。

有幾種解決方案,所以你必須根據你的實際使用情況來決定。

  • 只是堅持單向關係,如果你不需要從MetaDatum遍歷它的父實體。該關係將通過休眠映射到連接表。

  • 分別作出MetaDatum1MetaDatum2實體,可以有雙向關係到各自的父對象。

  • 創建兩個父實體共同的祖先,包括雙向關係MetaDatum

  • 創建兩個實體,每個封裝List<MetaDatum>,對於一個雙向的關係爲您量身定製SomethingSCD實體

+0

優秀的答案,謝謝你的信息!我認爲你的第一個解決方案最符合我正在開發的內容,因爲我不需要這種關係是雙向的,並且可以想象有超過十個對象需要這種關係。 – StuPointerException

+0

酷,歡迎您:) – kostja

+0

我會第五個選項是有一個JoinTable與每個相關聯的多個所有者字段。 – HDave