Порядок возврата дочерних объектов в запросе JPA - PullRequest
6 голосов
/ 03 января 2009

Так что, если мой запрос JPA выглядит так: Выберите отдельный p из родительского p, оставьте порядок соединения p.children с помощью p.someProperty

Я правильно получаю результаты обратно, упорядоченные p.someProperty, и я правильно получаю свою коллекцию p.children, которую охотно выбирают и заполняют. Но я бы хотел, чтобы мой запрос был что-то вроде «order by p.someProperty, p.children.someChildProperty», чтобы коллекция, заполненная внутри каждого родительского объекта, была упорядочена каким-либо образомChildProperty.

Это кажется интуитивно понятным, когда я думаю в терминах sql, который на самом деле генерируется для этих вызовов, но я полагаю меньше, когда он пытается отобразить иерархические объекты.

Ответы [ 2 ]

15 голосов
/ 03 января 2009

Для сохранения порядка используйте 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.

1 голос
/ 03 января 2009

Адиэль в основном это прибил. Вы также можете использовать те со списком, которые могут быть важны, если ваши коллекции содержат одну и ту же сущность более одного раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...