Hibernate のMapコレクション・マッピング
2008/07/24 15:32Update
Hibernate のMapコレクション・マッピング方法について学びます。
Hibernateコレクション・マッピングの詳細について、公式のリファレンス
をご参照ください。
サンプルから説明します。
◇ USER(ID, NAME)
◇ ADDRESS(ID, ADDR_NAME, CODE, USER_ID)
ADDRESSのUSER_IDはforeignキーで、ADDRESS.USER_ID = USER.IDとします。
即ち、テーブルUSERはADDRESSと1対多の関係で、HibernateのMapコレクションを用いるマッピング方法は次の通りです。
User.java
User.hbm.xml
※<map-key type="..." />でMapの要素の型を指定します。
※<one-to-many class="..." />でMapの要素の値を指定します。
ちなみに、Mapインタフェースは次の通りです。
//抜粋
package java.util;
public interface Map
{
...
public abstract Object get(Object key);
public abstract Object put(Object key, Object value);
public abstract Object remove(Object key);
...
}
Setインタフェースも添付します。
//抜粋
package java.util;
public interface Set
extends Collection
{
...
public abstract boolean add(Object obj);
public abstract boolean remove(Object obj);
...
}
よく見てください、java.util.Mapはjava.util.Setとの違い、Mapでは、Objectを追加(put)・取得(get)するのに、キーは必要となります。
この「キー」は<map-key type="..." />よって設定されます。
ここでは、entity.Addressクラスという型を指定していますが、elementによるテーブルのフィールドを指定することもできます。
さらに、composite-elementによる次のような複雑な設定もできます。
をご参照ください。サンプルから説明します。
テーブル
◇ USER(ID, NAME)
◇ ADDRESS(ID, ADDR_NAME, CODE, USER_ID)
ADDRESSのUSER_IDはforeignキーで、ADDRESS.USER_ID = USER.IDとします。
即ち、テーブルUSERはADDRESSと1対多の関係で、HibernateのMapコレクションを用いるマッピング方法は次の通りです。
Hibernateエンティティ
User.javapublic class User implements java.io.Serializable {
// Fields
private String id;
private String name;
private java.util.Map addressMap;
// 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" /> <map name="addressMap" table="ADDRESS"> <key column="USER_ID"></key> <map-key column="CODE" type="string"></map-key> <one-to-many class="entity.Address" /> </map> </class> </hibernate-mapping>
※<map-key type="..." />でMapの要素の型を指定します。
※<one-to-many class="..." />でMapの要素の値を指定します。
ちなみに、Mapインタフェースは次の通りです。
//抜粋
package java.util;
public interface Map
{
...
public abstract Object get(Object key);
public abstract Object put(Object key, Object value);
public abstract Object remove(Object key);
...
}
Setインタフェースも添付します。
//抜粋
package java.util;
public interface Set
extends Collection
{
...
public abstract boolean add(Object obj);
public abstract boolean remove(Object obj);
...
}
よく見てください、java.util.Mapはjava.util.Setとの違い、Mapでは、Objectを追加(put)・取得(get)するのに、キーは必要となります。
この「キー」は<map-key type="..." />よって設定されます。
ここでは、entity.Addressクラスという型を指定していますが、elementによるテーブルのフィールドを指定することもできます。
<map name="addressNameMap" table="ADDRESS"> <key column="USER_ID"></key> <map-key column="CODE" type="string"></map-key> <element type="string" column="ADDR_NAME" not-null="true"/> </map>
さらに、composite-elementによる次のような複雑な設定もできます。
<map name="addressMap" table="ADDRESS"> <key column="USER_ID"></key> <map-key column="CODE" type="string"></map-key> <composite-element class="entity.Address"> <property name="id"/> <property name="addrName"/> </composite-element> </map>
HibernateのMapコレクション・マッピングの使用例
User user = ...;//session.get(User.class, id);
Map<String, Address> addressMap = (Map<String, Address>)user.getAddressMap();
System.out.println(addressMap.get("addressCode").getAddrName());
Sponsored Link
- Relative Articles
- Hibernate設定ファイルその1 - hibernate.cfg.xml - (2008/07/09 14:08)
- Hibernate c3p0 - よく利用されているコネクションプーリング - (2008/07/09 15:00)
- Hibernate 方言(Dialect)一覧 - (2008/07/09 15:10)
- Hibernate のSessionとSessionFactory - (2008/07/09 15:51)
- ThreadLocal でHibernate Session を効率的に管理する - (2008/07/09 18:43)
- Hibernateで複数のDBに接続するには? - (2008/07/09 18:47)
- Hibernateとは - (2008/07/11 14:23)
- Hibernate のインストール - (2008/07/24 11:01)
- Hibernate の開発手順 - (2008/07/24 12:44)
- Hibernate SQLをログに出力方法 - (2008/07/30 16:06)