6.2.5. 一対多関連

6.2.5. 一対多関連

一対多関連 は、コレクションテーブルを介さず、外部キーにより2つのクラスのテーブルを関連付けます。このマッピングは標準的な Java のコレクションのセマンティクスをいくつか失います:

Product から Part への関連は、 Part テーブルへの外部キーカラムと、場合によってはインデックスカラムが必要です。 <one-to-many> タグは、これが一対多関連であることを表しています。

<one-to-many 
        class="ClassName"
        not-found="ignore|exception"
        entity-name="EntityName"
        node="element-name"
        embed-xml="true|false"
    />

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

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

entity-name (オプション): class の代替である関連クラスのエンティティ名。 class の代わりに指定する、関連クラスのエンティティ名。

<one-to-many> 要素はカラムを宣言する必要がないことに注意してください。同様に テーブル 名を指定する必要もありません。

とても重要な注意: もし <one-to-many> 関連の外部キーカラムが NOT NULLと宣言された場合、 <key> マッピングに not-null="true" を宣言するか、コレクションマッピングに inverse="true" を付けた上で、 双方向関連を使う 必要があります。双方向関連についてはこの章の後のほうで説明します。

次の例は、名称(Part の永続的なプロパティである partName) による Part エンティティの map を表しています。 formula によるインデックスを使っていることに注意してください。

<map name="parts"
        cascade="all">
    <key column="productId" not-null="true"/>
    <map-key formula="partName"/>
    <one-to-many class="Part"/>
</map>