6.3.1. 有序集合(Sorted collections)
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或者更高的jdk版本中才可以实现(通过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
属性的值是一个SQL排序子句而不是HQL的!
关联还可以在运行时使用集合filter()
根据任意的条件来排序。
sortedUsers = s.createFilter( group.getUsers(), "order by this.name" ).list();