Hibernate のSetコレクション・マッピング

2008/07/24 14:55Update
TAGS: Hibernate | Setコレクション

Hibernate のSetコレクション・マッピング方法について学びます。

Hibernateコレクション・マッピングの詳細について、公式のリファレンス をご参照ください。

サンプルから説明します。

テーブル



◇ USER(ID, NAME)
◇ ADDRESS(ID, ADDR_NAME, USER_ID)

ADDRESSのUSER_IDはforeignキーで、ADDRESS.USER_ID = USER.IDとします。

即ち、テーブルUSERはADDRESSと1対多の関係で、HibernateのSetコレクションを用いるマッピング方法は次の通りです。

Hibernateエンティティ


User.java
public class User  implements java.io.Serializable {   

    // Fields

    private String id;
    private String name;
    private java.util.Set addressSet;

    // setter/getter

    ...

}


Hibernateマッピング・設定


User.hbm.xml
<hibernate-mapping>
    <class name="entity.User" table="USER">
        <id name="id" type="string" column="ID" length="32">
            <generator class="uuid.hex" />
        </id>
        <property name="name" column="NAME" type="string"  not-null="true" length="100" /> 

        <set name="addressSet" table="ADDRESS">
            <key column="USER_ID"></key>
            <one-to-many class="entity.Address" />
        </set>
    </class>
</hibernate-mapping>

※<one-to-many class="..." />でSetの要素の型を指定します。

ここでは、entity.Addressクラスという型を指定していますが、elementによるテーブルのフィールドを指定することもできます。
        <set name="addressNameSet" table="ADDRESS">
            <key column="USER_ID"></key>
            <element type="string" column="ADDR_NAME" not-null="true"/>
        </set>


さらに、composite-elementによる次のような複雑な設定もできます。
        <set name="addressNameSet" table="ADDRESS">
            <key column="USER_ID"></key>
              <composite-element class="entity.Address">
                <property name="id"/>
                <property name="addrName"/>
             </composite-element>
        </set>


HibernateのSetコレクション・マッピングの使用例


User user = ...;//session.get(User.class, id);

Set<Address> addressSet = user.getAddressSet();

for (Address address : addressSet) {
    System.out.println(address.getAddrName());
}

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments