views:

1687

answers:

2

So if my JPA query is like this: Select distinct p from Parent p left join fetch p.children order by p.someProperty

I correctly get results back ordered by p.someProperty, and I correctly get my p.children collection eagerly fetched and populated. But I'd like to have my query be something like "order by p.someProperty, p.children.someChildProperty" so that the collection populated inside each parent object was sub-ordered by someChildProperty.

This seems intuitive when I think in terms of the sql that is actually generated for these calls, but I guess less so when it tries to map back to hierarchical objects.

+3  A: 

For preserving order, use TreeSet. As far as, sorting of a collection inside parent is concerned, just do it in your code using Comparator.

Well, try this on your collection definition in your parent entity class. I hope you are getting my point.

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

and you can also use this,

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

or

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

In the case of comparator, a comparator must be in place. Other might only work with String collections.

Adeel Ansari
+1  A: 

Adeel basically has this nailed. You can also use those with a List which might be important if your collections contain the same entity more than once.

cliff.meyers