daybreaksnow's diary

私を私と呼びたい

[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