2009-01-02 41 views
5

所以,如果我的JPA查詢是這樣的: 選擇從父p左邊兩個截然不同的p-參加由p.someProperty取p.children爲了訂貨回報在JPA查詢對象

我得到正確的結果返回由對有序.someProperty,我正確地得到我的p.children集合熱切地被提取和填充。但我希望我的查詢是「按p.someProperty,p.children.someChildProperty排序」,以便在每個父對象內部填充的集合是由someChildProperty進行的子命令。

這似乎直觀的時候我覺得,實際上是這些調用生成的SQL方面,但我想沒有那麼當它試圖映​​射回分層對象。

回答

13

爲了維持秩序,請使用TreeSet。就父母收集內容的排序而言,只需在您的代碼中使用Comparator即可。

那麼,試試這在您的父實體類的集合定義。我希望你明白我的觀點。

您可以使用此JPA批註,

@javax.persistence.OrderBy(value = "fieldName") 

或與此Hibernate具體,

@org.hibernate.annotations.OrderBy(clause = "FIELD_NAME asc") 

,你也可以利用這一點,

@org.hibernate.annotations.Sort(type = SortType.NATURAL) 

@org.hibernate.annotations.Sort(type = SortType.COMPARATOR) 

在比較器的情況下,必須有一個比較器。其他可能只適用於String集合。

+0

作爲一種通用的替代方案,你可以使用javax註釋:@ javax.persistence.OrderBy(值=「字段名」) – 2012-05-20 13:46:54

1

阿迪爾基本上有這個釘。如果您的集合不止一次包含相同的實體,您也可以將它們用於List。