从数据库中检索时对hibernate集合进行排序

时间:2011-02-22 17:06:17

标签: java hibernate

我有一个带有Bar列表的对象Foo。有没有办法设置我的类,以便getBars()将返回一个已用Collections.sort排序的List?换句话说,我想在首次填充列表时运行Collections.sort。目前,我在检索集合时调用sort,这可能是多余的,很容易被遗忘。

5 个答案:

答案 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)

从数据库中选择时对列表进行排序会更好(让数据库排序)选择,而不是在选择后对其进行排序。