2011-02-22 260 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的對象,在這個例子中。

相關問題