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

问题描述:

我有一个带有Bar列表的对象Foo。有没有一种方法可以设置我的类,以便getBars()将返回已使用Collections.sort排序的List?换句话说,我想在列表首次填充时运行Collections.sort。目前,当我检索收藏时,我会打电话排序,这可能是多余的,很容易被人遗忘。当从数据库检索时对hibernate集合进行排序

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

如果您使用的是JPA,则可以使用@OrderBy注释让数据库为您对集合进行排序。您也可以使用@Sort在Java端执行此操作。最后,如果你正在编写HQL - 比如在@NamedQuery中 - 你可以使用ORDER BY子句。

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

我认为,如果你@Sort注释属性它就会自动排序

你还要指定自定义Comparator类的选项:

@Sort(comparator=MyComparator.class, type=SortType.COMPARATOR) 

参考:

+0

只需要注意`@ Sort`注解已被废弃,更新后的示例将如下所示:`@SortComparator(MyComparator.class)`。 – 2015-03-11 22:47:48

+0

@JasonSperske你为什么不添加一个答案呢? – 2015-03-12 08:04:33

退房休眠文件的排序集合

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections-sorted

你也可以在你的DAO中使用另一种方法来使用hql来获取孩子,你可以通过hql进行排序。

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

从数据库中选择时对列表排序会更好(让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的对象,在这个例子中。