Red Hat Training
A Red Hat training course is available for Red Hat JBoss Web Server
7.3. 高度なコレクションマッピング
7.3.1. ソートされたコレクション
Hibernate は
java.util.SortedMap
と java.util.SortedSet
を実装したコレクションをサポートしています。開発者はマッピング定義ファイルにコンパレータを指定しなければなりません:
<set name="aliases" table="person_aliases" sort="natural"> <key column="person"/> <element column="name" type="string"/> </set> <map name="holidays" sort="my.custom.HolidayComparator"> <key column="year_id"/> <map-key column="hol_name" type="string"/> <element column="hol_date" type="date"/> </map>
sort
属性に設定できる値は unsorted
と natural
および、 java.util.Comparator
を実装したクラスの名前です。
ソートされたコレクションは実質的には
java.util.TreeSet
や java.util.TreeMap
のように振舞います。
データベース自身にコレクションの要素を並べさせたい場合、
set
や bag
、map
マッピングの order-by
属性を使います。この解決法は JDK1.4 、もしくはそれ以上のバージョンで利用可能で、LinkedHashSet
または LinkedHashMap
を使って実装されています。これはメモリ上ではなく、SQL クエリ内で整列の実行されます。
<set name="aliases" table="person_aliases" order-by="lower(name) asc"> <key column="person"/> <element column="name" type="string"/> </set> <map name="holidays" order-by="hol_date, hol_name"> <key column="year_id"/> <map-key column="hol_name" type="string"/> <element column="hol_date type="date"/> </map>
注記
order-by
属性の値は、HQL 命令ではなくSQL 命令となっています。
関連は、コレクションの
filter()
を使うことで、実行時に任意の criteria によってソートすることも可能です:
sortedUsers = s.createFilter( group.getUsers(), "order by this.name" ).list();