Hibernate Set/Map/Bagコレクションのorder-by設定について
2010/08/23 17:52Update
並び順(ORDER BY)をHibernateで実装する方法としてはSQLやHQLを使う方法とCriteriaクラスを使う方法などがありますが、マッピングされた親子関係のテーブル同士の場合、Map、Set、Bagなどコレクションデータにorder byをかけたい場合、もっと簡単な方法があります。
例えば、
ある親(PARENT)に複数の子(CHILDREN)がいるとします、これらの子を「名前順」でORDER BYをかけたい場合、
以下のようなテーブル定義があるとします。
◇親テーブル
PARENT(ID、NAME)
◇子テーブル
CHILDREN(ID、NAME、PARENT_ID)
Parent.hbm.xml定義例
<set />マッピングのorder-by属性に「NAME」を指定することで、自動的にCHILDRENのNAME順にORDER BYしてくれます。
ちなみに、
※order-byに子テーブルのフィールド名及びASC、DESCを指定できます。
■order-by属性を指定可能なマッピング定義
また、次のようなマッピングにorder-byを指定可能です。
<map />
<set />
<bag />
<idbag />
<many-to-many />
Hibernate Criteriaクエリ - Criteria.addOrderメソッドで並び順の設定 
Hibernate のSetコレクション・マッピング
Hibernate のMapコレクション・マッピング
ある親(PARENT)に複数の子(CHILDREN)がいるとします、これらの子を「名前順」でORDER BYをかけたい場合、
以下のようなテーブル定義があるとします。
◇親テーブル
PARENT(ID、NAME)
◇子テーブル
CHILDREN(ID、NAME、PARENT_ID)
Parent.hbm.xml定義例
<hibernate-mapping> <class name="com.test.entity.Parent" table="PARENT" lazy="false" > <id name="id" type="java.lang.String" column="ID" length="32" > <generator class="uuid.hex" /> </id> <set name="childrenSet" cascade="all-delete-orphan" lazy="true" inverse="true" outer-join="auto" order-by="NAME ASC"> <key column="PARENT_ID" not-null="true" /> <one-to-many class="com.test.entity.ChildrenTable"/> </set> </class> </hibernate-mapping>
<set />マッピングのorder-by属性に「NAME」を指定することで、自動的にCHILDRENのNAME順にORDER BYしてくれます。
ちなみに、
order-by="NAME ASC"
というのは、ORDER BY NAME ASCというSQLが実行されます。※order-byに子テーブルのフィールド名及びASC、DESCを指定できます。
■order-by属性を指定可能なマッピング定義
また、次のようなマッピングにorder-byを指定可能です。
<map />
<set />
<bag />
<idbag />
<many-to-many />
参考資料
Hibernate Criteriaクエリ - Criteria.addOrderメソッドで並び順の設定 
Hibernate のSetコレクション・マッピング
Hibernate のMapコレクション・マッピング
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)