Red Hat Training

A Red Hat training course is available for Red Hat JBoss Web Server

7.2.5. 一対多関連

一対多関連 は、コレクションテーブルを介さず、外部キーにより2つのクラスのテーブルを関連付けます。このマッピングは標準的な Java のコレクションにある特定のセマンティクスを失います:
  • 包含されたエンティティクラスのインスタンスは、2つ以上のコレクションのインスタンスに属してはいけません。
  • コレクションに含まれるエンティティクラスのインスタンスは、コレクションインデックスの値として2度以上現れてはいけません。
Product から Part への関連は、 Part テーブルへの外部キーカラムと、場合によってはインデックスカラムが存在していなければなりません。 <one-to-many> タグは、これが一対多関連であることを表しています。
<one-to-many 
        class="ClassName"                                   1
        not-found="ignore|exception"                        2
        entity-name="EntityName"                            3
        node="element-name"
        embed-xml="true|false"
    />

1

class(必須): 関連クラスの名前。

2

not-found (オプション - デフォルトは exception): 参照先の行がないキャッシュされた識別子をどのように扱うかを指定します: ignore は、行がないことを関連がないものとして扱います。

3

entity-name (オプション):class の代わりとなる、 関連クラスのエンティティ名。
<one-to-many> 要素はいかなるカラムを宣言する必要がないことに注意してください。同様に どこにもテーブル 名を指定する必要もありません。

警告

<one-to-many> 関連の外部キーカラムが NOT NULLと宣言された場合、<key> マッピングに not-null="true" を宣言するか、コレクションマッピングに inverse="true" を付けた上で、 双方向関連を使う 必要があります。双方向関連の詳細情報についてはこの章で後述します。
次の例は、名称(Part の永続的なプロパティである partName) による Part エンティティの マップを表しています。関数ベースのインデックスを使っていることに注意してください。
<map name="parts"
        cascade="all">
    <key column="productId" not-null="true"/>
    <map-key formula="partName"/>
    <one-to-many class="Part"/>
</map>