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

Java 从数据库检索时对hibernate集合进行排序,java,hibernate,Java,Hibernate,我有一个对象Foo和一个列表条。是否有一种方法可以设置我的类,以便getBars()返回已使用Collections.sort进行排序的列表?换句话说,我希望在第一次填充列表时运行Collections.sort。目前,我在检索集合时调用sort,这可能是多余的,很容易忘记。我认为如果您使用@sort注释属性,它会自动排序 您还可以选择指定自定义类: 参考资料: 查看已排序集合的hibernate文档 您还可以在DAO中放置另一个方法,该方法使用hql获取子对象,您可以通过hql对子对象

我有一个对象Foo和一个列表条。是否有一种方法可以设置我的类,以便getBars()返回已使用Collections.sort进行排序的列表?换句话说,我希望在第一次填充列表时运行Collections.sort。目前,我在检索集合时调用sort,这可能是多余的,很容易忘记。

我认为如果您使用
@sort
注释属性,它会自动排序

您还可以选择指定自定义类:

参考资料:


查看已排序集合的hibernate文档

您还可以在DAO中放置另一个方法,该方法使用hql获取子对象,您可以通过hql对子对象进行排序


如果排序过程不是基于单个列,我认为您别无选择,只能自己进行排序。您可以将逻辑添加到您的域模型中…

您是对Hibernate XML文件使用J2EE样式的映射,还是使用JPA注释的JavaBeans

如果您使用的是JPA,那么可以使用注释让数据库为您排序集合。您还可以在Java端使用它

最后,如果您正在编写HQL,比如在
@NamedQuery
中,您可以使用该子句


有很多方法可以做到这一点

从DB中选择时对列表进行排序将是一个更好的选择(让DB对其进行排序),而不是在选择后对其进行排序

如果您使用的是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
对象。

当然,但是,当您要对条件查询集合进行排序时,这不是一个选项。您是否要将不同的查询结果合并到一个查询结果中,然后对您拥有的结果进行排序?很简单,
@sort
注释已被弃用,更新的示例如下所示:
@SortComparator(mycomparitor.class)
@JasonSperske为什么不加上一个答案呢?
<class name="Foo" table="Foo">
    ...

    <set name="bars" inverse="true" order-by="barName">
        <key column="fooId" />
        <one-to-many class="Bar" />
    </set>
</class>