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();