2011-02-22 79 views
8

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

回答

24

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

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

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

7

我认为,如果你@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

0

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

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的对象,在这个例子中。

相关问题