我有一个带有Bar列表的对象Foo。有没有办法设置我的类,以便getBars()将返回一个已用Collections.sort排序的List?换句话说,我想在首次填充列表时运行Collections.sort。目前,我在检索集合时调用sort,这可能是多余的,很容易被遗忘。
答案 0 :(得分:24)
您是使用带有Hibernate XML文件的J2EE样式映射,还是使用JPA注释的JavaBeans?
如果您正在使用JPA,则可以使用@OrderBy
注释让数据库为您对集合进行排序。您也可以使用@Sort
在Java端执行此操作。
最后,如果您正在编写HQL - 例如,在@NamedQuery
中 - 您可以使用ORDER BY
子句。
有很多方法可以做到!
答案 1 :(得分:7)
我认为如果您使用@Sort
注释该属性,它会自动排序
您还可以选择指定自定义Comparator
类:
@Sort(comparator=MyComparator.class, type=SortType.COMPARATOR)
<强>参考:强>
答案 2 :(得分:3)
查看已排序集合上的hibernate文档
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections-sorted
您还可以在DAO中添加另一个使用hql来获取子项的方法,您可以通过hql对其进行排序。
如果排序程序不是基于单个列,我认为你没有别的选择,只能自己进行排序。您可以将逻辑添加到域模型中......
答案 3 :(得分:3)
如果您使用的是XML配置,则可以设置order-by
属性: -
<class name="Foo" table="Foo">
...
<set name="bars" inverse="true" order-by="barName">
<key column="fooId" />
<one-to-many class="Bar" />
</set>
</class>
这样,当您调用foo.getBars()
时,在此示例中,您将获得按条名排序的Bar
个对象。
答案 4 :(得分:0)
从数据库中选择时对列表进行排序会更好(让数据库排序)选择,而不是在选择后对其进行排序。