[Hibernate]バリュー型のコレクションのマッピング
Hibernate In Action 6.2
DBのテーブル構成を意識せずエンティティの関連を取る
例:
商品に複数の画像が紐付いていて、必要な情報は画像のファイル名のみ。
Item→ItemImageが1対多の関係。
DB上はItemImageがitem_idで関連を保持している。
Item.java
/** ItemImageのfileNameカラムとマッピングしている */ private Set<String> itemImages = new HashSet(0);
Item.hbm
<set name="itemImages" table="item_image" inverse="true" > <key> <column name="item_id" not-null="true" /> </key> <!-- many to one ではなく、elementタグを使う --> <element type="string" column="FILE_NAME" /> </set>
関連の設定をまとめると以下のような感じか。
関連 | hbmで使うタグ |
---|---|
エンティティ→エンティティの1対多 | set one-to-many |
エンティティ→バリュー型の1対多 | set element |
エンティティ→エンティティの多対1 | many-to-one |
エンティティ→バリュー型の1対1 | component |