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

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

コレクションをマッピングするためのマッピング要素は、インターフェースの型に依存します。例えば、 <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"
    table="table_name"
    schema="schema_name"
    lazy="true|extra|false"
    inverse="true|false"
    cascade="all|none|save-update|delete|all-delete-orphan|delete-orphan"
    sort="unsorted|natural|comparatorClass"
    order-by="column_name asc|desc"
    where="arbitrary sql where condition"
    fetch="join|select|subselect"
    batch-size="N"
    access="field|property|ClassName"
    optimistic-lock="true|false"
    mutable="true|false"
    node="element-name|."
    embed-xml="true|false"
>

    <key .... />
    <map-key .... />
    <element .... />
</map>

name コレクション型であるプロパティの名前

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

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

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

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

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

sort (オプション)コレクションを自然な順序でソートする場合は natural を指定します。あるいは Comparator クラスを指定します。

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

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

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

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

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

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

mutable(オプション - デフォルトは truefalse 値は、コレクションの要素が変更されないことを表します (ある場合には、少しパフォーマンスを高めます)。