Hibernate のListコレクション・マッピング
2008/07/24 16:24Update
Hibernate のListコレクション・マッピング方法について学びます。
Hibernateコレクション・マッピングの詳細について、公式のリファレンス
をご参照ください。
サンプルから説明します。
◇ FATHER(ID, NAME)
◇ SON(ID, NAME, ORDER_INDEX, FATHER_ID)
SONのFATHER_IDはforeignキーで、SON.FATHER_ID = FATHER.IDとします。
SONのORDER_INDEXはSONの順序を保持するためのフィールドで、integerの型となります。
即ち、テーブルFATHERはSONと1対多の関係で、HibernateのListコレクションを用いるマッピング方法は次の通りです。
Father.java
Father.hbm.xml
※<list-index column="..." />のcolumnは「多」側の要素のインデックスを保持するカラム名を指定します。
※<one-to-many class="..." />でListコレクションにセットされる要素値の型を指定します。
ちなみに、Listインタフェースは次の通りです。
//抜粋
package java.util;
public interface List
{
...
public abstract boolean add(Object obj);
...
public abstract Object get(int i);
public abstract Object set(int i, Object obj);
public abstract void add(int i, Object obj);
...
}
HibernateのListコレクションでは、Objectを追加(put)・取得(get)するのに、インデックスは必要となります。
この「インデックス」を<list-index column="..." />よって指定します。
ここでは、entity.Sonクラスという型を指定していますが、elementによる「多」側のテーブルのフィールドを指定することもできます。
さらに、composite-elementによる次のような複雑な設定もできます。
をご参照ください。サンプルから説明します。
テーブル
◇ FATHER(ID, NAME)
◇ SON(ID, NAME, ORDER_INDEX, FATHER_ID)
SONのFATHER_IDはforeignキーで、SON.FATHER_ID = FATHER.IDとします。
SONのORDER_INDEXはSONの順序を保持するためのフィールドで、integerの型となります。
即ち、テーブルFATHERはSONと1対多の関係で、HibernateのListコレクションを用いるマッピング方法は次の通りです。
Hibernateエンティティ
Father.javapublic class Father implements java.io.Serializable {
// Fields
private String id;
private String name;
private java.util.List sonList;
// setter/getter
...
}
Hibernateマッピング・設定
Father.hbm.xml<hibernate-mapping> <class name="entity.Father" table="FATHER"> <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" /> <list name="sonList" table="SON"> <key column="FATHER_ID"></key> <list-index column="ORDER_INDEX" /> <one-to-many class="entity.Son" /> </list> </class> </hibernate-mapping>
※<list-index column="..." />のcolumnは「多」側の要素のインデックスを保持するカラム名を指定します。
※<one-to-many class="..." />でListコレクションにセットされる要素値の型を指定します。
ちなみに、Listインタフェースは次の通りです。
//抜粋
package java.util;
public interface List
{
...
public abstract boolean add(Object obj);
...
public abstract Object get(int i);
public abstract Object set(int i, Object obj);
public abstract void add(int i, Object obj);
...
}
HibernateのListコレクションでは、Objectを追加(put)・取得(get)するのに、インデックスは必要となります。
この「インデックス」を<list-index column="..." />よって指定します。
ここでは、entity.Sonクラスという型を指定していますが、elementによる「多」側のテーブルのフィールドを指定することもできます。
<list name="sonNameList" table="SON"> <key column="FATHER_ID"></key> <list-index column="ORDER_INDEX" /> <element type="string" column="NAME" not-null="true"/> </list>
さらに、composite-elementによる次のような複雑な設定もできます。
<list name="sonList" table="SON"> <key column="FATHER_ID"></key> <list-index column="ORDER_INDEX" /> <composite-element class="entity.Son"> <property name="id"/> <property name="name"/> </composite-element> </list>
HibernateのListコレクション・マッピングの使用例
Father father = ...;//session.get(Father.class, id);
List<Son> sonList = (List<Son>)father.getSonList();
if (sonList != null && sonList.size() > 0) {
System.out.println(sonList.get(0).getName());
}
Sponsored Link
- Relative Articles
- Hibernate Set/Map/Bagコレクションのorder-by設定について - (2010/08/23 17:52)
- Hibernate subclassを利用する 継承 マッピングの実装 - (2009/12/22 18:24)
- Hibernate Criteriaクエリ setFetchMode でパフォーマンス改善 | fetch 戦略 - (2008/09/08 15:10)
- Hibernate HQLクエリ join fetch でパフォーマンス改善 | fetch 戦略 - (2008/09/08 14:22)
- Hibernate マッピング - fetch 戦略でパフォーマンス改善 | 概要 - (2008/09/05 19:27)
- Hibernate マッピング - outer-joinプロパティでパフォーマンス改善 - (2008/08/29 18:32)
- Hibernate マッピング - カスケードcascade="delete" - (2008/08/21 11:47)
- Hibernate マッピング - カスケードcascade="save-update" - (2008/08/21 11:03)
- Hibernate マッピング - カスケードcascade="all-delete-orphan"で処理を自動化させる - (2008/08/20 19:44)
- Hibernate マッピング - カスケードcascade="all"で処理を自動化させる - (2008/08/20 19:11)
- Hibernate究明 - 双方向関連のinverse属性 - (2008/08/19 18:32)
- Hibernate のArrayコレクション・マッピング - (2008/07/28 12:02)
- HibernateのコレクションSet/Map/List/Array/Bagの比較(1) - (2008/07/25 13:03)
- Hibernate のMapコレクション・マッピング - (2008/07/24 15:32)
- Hibernate のSetコレクション・マッピング - (2008/07/24 14:55)