6.2. コレクションのマッピング

注記

多くの一般的なリレーショナルモデルに対応するコレクション向けに生成可能な マッピングにはかなりの幅があります。様々なマッピング宣言がどのようにデータベーステーブルに変換されるかを知るために、スキーマ生成ツールを使ってみると良いでしょう。
コレクションをマッピングする際に利用するHibernateマッピング要素は、インターフェースの型に依存します。例えば、<set> 要素は Set 型のプロパティをマッピングするために使います。
<class name="Product">
    <id name="serialNumber" column="productSerialNumber"/>
    <set name="parts">
        <key column="productSerialNumber" not-null="true"/>
        <one-to-many class="Part"/>
    </set>
</class>
マッピング要素には <set> の他に <list><map><bag><array><primitive-array> があります。代表として、 <map> 要素を下記に示します。
<map
    name="propertyName"                                          1
    table="table_name"                                           2
    schema="schema_name"                                         3
    lazy="true|extra|false"                                      4
    inverse="true|false"                                         5
    cascade="all|none|save-update|delete|all-delete-orphan|delete-orphan"    6
    sort="unsorted|natural|comparatorClass"                      7
    order-by="column_name asc|desc"                              8
    where="arbitrary sql where condition"                        9
    fetch="join|select|subselect"                                10
    batch-size="N"                                               11
    access="field|property|ClassName"                            12
    optimistic-lock="true|false"                                 13
    mutable="true|false"                                         14
    node="element-name|."
    embed-xml="true|false"
>
 
    <key .... />
    <map-key .... />
    <element .... />
</map>

1

name コレクションのプロパティ名

2

table(オプション - デフォルトはプロパティ名)コレクションテーブルの名前。これは一対多関連では使用しません。

3

schema (オプション)テーブルスキーマの名前。ルート要素で宣言されているスキーマより優先されます。

4

lazy(オプション - デフォルトは true)遅延フェッチを無効にし、関連を常に即時にフェッチにするために使用します。または、コレクションを初期化しない多くの操作において、 「extra-lazy」フェッチを有効にするために使用します。これは大きなコレクションに適しています。

5

inverse (オプション - デフォルトは false) このコレクションが双方向関連の「逆」側であるとマークします。

6

cascade (オプション - デフォルトは none):子エンティティへのカスケード操作を有効にします。

7

sort(オプション): naturalな順序でソートされた コレクションもしくは、ある Comparator クラスを指定します。

8

order-by(オプション、 JDK1.4 のみ)MapSet、bag のイテレーション順序を定義するテーブルカラムを指定すると共に、オプションとして ascdesc を指定します。

9

where (オプション)コレクションの検索や削除の際に使う任意の SQL のWHERE 条件を指定します。これは、利用可能なデータの一部分だけをコレクションが含むべきときにこれは有用です。

10

fetch(オプション - デフォルトは select) 外部結合によるフェッチ、順次選択フェッチ (sequential select fetch) 、順次サブセレクトフェッチ (sequential subselect fetch) のいずれかを選択してください。

11

batch-size(オプション - デフォルトは 1)このコレクションのインスタンスを遅延フェッチするために、「バッチサイズ」を指定します。

12

access(オプション - デフォルトは property)Hibernate がコレクションプロパティの値にアクセスするために使用する戦略です。

13

optimistic-lock (オプション - デフォルトは true) コレクションの状態を変えることによって、そのオーナーであるエンティティのバージョンがインクリメントされるかを指定します。一対多関連では無効に設定するのが妥当です。

14

mutable(オプション - デフォルトは truefalse 値は、コレクションの要素が決して変更されないことを表します。一部の場合で若干パフォーマンスを高めることができます。

6.2.1. コレクションの外部キー

コレクションのインスタンスは、データベース内では、そのコレクションを所有するエンティティの外部キーによって識別されます。この外部キーはコレクションテーブルの コレクションキーカラム またはカラムと呼ばれます。コレクションキーカラムは <key> 要素によりマッピングします。
外部キーカラムには null 設定制約があるかもしれません。ほとんどのコレクションに当てはまるでしょう。単方向の一対多関連において、外部キーカラムはデフォルトで null を許容する設定になっています。よって、not-null="true" を指定する必要があるかもしれません。
<key column="productSerialNumber" not-null="true"/>
外部キーの制約が ON DELETE CASCADE を使う場合もあります。
<key column="productSerialNumber" on-delete="cascade"/>
<key> 要素のすべての定義については前の章を参照してください。