7.2.3. インデックス付きのコレクション
set と bag を除く全てのコレクションマッピングには、コレクションテーブルの中に インデックス用のカラム が必要です。そのカラムに、配列や
List のインデックス、もしくは Map のキーをマッピングします。 Map のインデックスは、 <map-key> によりマッピングされた基本型か、 <map-key-many-to-many> によりマッピングされたエンティティの関連か、あるいは <composite-map-key> によりマッピングされたコンポジット型になります。配列かリストのインデックスは、常に integer 型で、 <list-index> 要素によりマッピングします。マッピングされたカラムにはシーケンシャルな整数を格納します。デフォルトでは0から番号が付けられます。
<list-index
column="column_name"
base="0|1|..."/>
<list-index
column="column_name"
base="0|1|..."/>
| column_name (必須): コレクションインデックスの値を保持するカラム名。
|
| base (オプション - デフォルトでは0): リスト もしくはアレイの最初の要素に対応するインデックス カラムの値
|
| column (オプション): コレクションインデックスの値を保持するカラム名。
|
| formula (オプション):マップのキーを評価する際に利用する SQL 式。
|
| type (必須): マップキーの型
|
<map-key-many-to-many
column="column_name"
formula="any SQL expression"
class="ClassName"
/>
<map-key-many-to-many
column="column_name"
formula="any SQL expression"
class="ClassName"
/>
| column (オプション): コレクションインデックスの値に対する外部キーカラム名
|
| formula (オプション): マップキーの外部キーを評価する際に利用するSQL 式。
|
| class (必須): マップキーとして利用するエンティティクラス。
|
テーブルにインデックスのカラムがないにも拘らずプロパティ型として
Listを利用したい場合、Hibernate <bag>としてこのプロパティをマッピングすることができます。データベースへ渡され永続化された場合、bag はその順序を保持しますが、データベースからリトリーブした場合はオプションで分類および順序付けをすることができます。

