Порядок возврата дочерних объектов в запросе JPA

StackOverflow https://stackoverflow.com/questions/408051

  •  03-07-2019
  •  | 
  •  

Вопрос

Итак, если мой запрос JPA выглядит следующим образом:Select distinct p из родительского p left join извлекает p.дочерние элементы упорядочиваются по p.SomeProperty

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

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

Это было полезно?

Решение

Для сохранения порядка используйте Набор деревьев.Что касается сортировки коллекции внутри родительского элемента, просто сделайте это в своем коде, используя Компаратор.

Что ж, попробуйте это для определения вашей коллекции в вашем родительском классе сущностей.Я надеюсь, вы поняли мою точку зрения.

Вы можете использовать эту аннотацию JPA,

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

или это специфичный режим гибернации,

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

и вы также можете использовать это,

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

или

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

В случае компаратора компаратор должен быть на месте.Другое может работать только с коллекциями строк.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top