2011-01-27 13 views
1

私は3つのテーブルを持っています。Hibernateでは多対多マッピングが可能ですか? <strong>項目</strong>、</strong>と<strong>はもちろんアイテムとノードのIDが含まれているリンクテーブルとして</strong>をitem_node <strong>ノード:

対応するクラスItemNodeが何らかの方法でItemクラスとNodeクラスの参照を保持するような方法で、リンクテーブル(item_node)をマップできますか?リンクテーブルをm:nの関係にマッピングする方法はありますか?

私はこのようなものを想像するでしょう:

public class INCompID { 

private Item item; 
private Node node; 

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

項目ノードすでにマッピングされていると自分で正常に動作し:INCompIDは、複合IDのクラスがある

<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> 

を。

これは多対多の関係を扱うための通常の方法ではないことを知っていますが、標準的なセット/バッグベースのアプローチでは厄介な問題があります。膨大な量のデータ(DB表には何十万行も)が含まれるため、これらのコレクションを熱心にロードする方法があります。
Spring AOPはトランザクション管理に使用されます。 OpenSessionInViewFilter /インターセプタはどちらか、この特定の問題のために有用ではないようで、そう...

答えて

1

は私が対応するクラスItemNodeは何とか項目およびノー​​ドへの参照を保持しているように、連結テーブル(item_node)をマッピングすることができクラス?

することもできます。これを見るもう1つの方法は、ItemNodeが単独でプロパティを保持できることを想像することです(たとえば、 "sequence_no")。したがって、ItemNodeはItemとNodeの間の単なるリンクではなく、事実上、Entityであることができます。

は、Hibernateのテストスイートからこの例を参照してください:nの関係:

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

は、マッピングリンクメートルのテーブルのための任意の既知の練習はありますか?

個人的な好みがありますが、ベストプラクティスはありません。物事が変わることを理解し、準備ができている人がいます。関係を実体としてマッピングします。そして、この関係はOOモデルの関係としてだけ見なければならないと信じる人々がいる。

+0

返信いただきありがとうございました – Less

関連する問題

 関連する問題