2011-01-27 36 views
1

我有三個表:項目節點item_node作爲連接表,當然其中包含的項目和節點的標識。這種方法可以在Hibernate中實現多對多映射嗎?

我可以映射鏈接表(item_node),以便相應的類ItemNode持有對Item和Node類的某種引用嗎?是否有任何已知的做法在m:n關係中映射鏈接表?

我會想象這樣的事情:

<class name="test.model.ItemNode" table="ITEM_NODE"> 
    <composite-id name="ID" class="test.model.INCompID"> 
     <key-property name="item" column="ITEM_ID" /> 
     <key-property name="node" column="NODE_ID"/> 
    </composite-id> 
</class> 

其中INCompID是複合ID類:

public class INCompID { 

private Item item; 
private Node node; 

//getters, setters and overriden 
//equals() and hashCode() methodes 
} 

項目節點已經映射和正常工作本身。

我知道這不是處理多對多關係的常用方法,但由於懶惰的初始化異常,我使用基於標準set/bag方法的問題頗爲惱人,並且沒有因爲它們將包含大量數據(數據庫表中的成千上萬行),所以可以加載這些集合。
Spring AOP用於事務管理。的OpenSessionInViewFilter /攔截器似乎並不爲這個特定的問題或者有幫助,所以......

回答

1

我能以這樣的方式映射鏈接表(item_node)對應類ItemNode持有莫名其妙項和節點引用班?

你當然可以。另一種查看方法是想象ItemNode可以單獨擁有一個屬性(例如「sequence_no」)。因此,ItemNode本身可以有效地成爲一個實體,而不僅僅是Item和Node之間的鏈接。

請參閱從休眠測試套件這個例子:

https://github.com/hibernate/hibernate-core/tree/master/hibernate-core/src/test/java/org/hibernate/test/manytomanyassociationclass

是否有在M映射鏈接表任何已知的做法:N的關係?

有個人喜好,但不是最佳實踐。有些人認識到事情會發生變化,他們會爲此做好準備:他們將關係映射爲一個實體。然後,有人認爲這種關係也應該被視爲OO模型中的關係。

+0

感謝您的回覆,這很有幫助 – Less 2011-01-28 09:34:46