Red Hat Training
A Red Hat training course is available for Red Hat JBoss Web Server
7.3.3. インデックス付きコレクションと双方向関連
片側が
<list>
や <map>
で表現される 双方向関連は、特別な考慮が必要です。インデックスカラムにマップされる子クラスのプロパティがある場合は、コレクションのマッピングで inverse="true"
を使い続けることができます。
<class name="Parent"> <id name="id" column="parent_id"/> .... <map name="children" inverse="true"> <key column="parent_id"/> <map-key column="name" type="string"/> <one-to-many class="Child"/> </map> </class> <class name="Child"> <id name="id" column="child_id"/> .... <property name="name" not-null="true"/> <many-to-one name="parent" class="Parent" column="parent_id" not-null="true"/> </class>
しかし、子クラスにそのようなプロパティがない場合は、関連を真に双方向であるとすることができません。つまり、関連の片側に利用できる情報がありますが、もう一方にはありません。この場合は、コレクションに
inverse="true"
をマッピングできません。代わりに、次のようなマッピングが使えます:
<class name="Parent"> <id name="id" column="parent_id"/> .... <map name="children"> <key column="parent_id" not-null="true"/> <map-key column="name" type="string"/> <one-to-many class="Child"/> </map> </class> <class name="Child"> <id name="id" column="child_id"/> .... <many-to-one name="parent" class="Parent" column="parent_id" insert="false" update="false" not-null="true"/> </class>
注意:このマッピングでは、関連のコレクション値の側は、外部キーのアップデートを担当しています。