企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 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(); ```