Сортировка списка объектов JPQL - PullRequest
3 голосов
/ 24 ноября 2011

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

По сути, у нас есть сущность "Person"с полями

String name
List<Telephone> phones
List<Email> emails
List<Address> addresses

«Телефон», «Электронная почта» и «Адрес» - все это отдельные сущности, каждая из которых содержит свои собственные данные, например строковое поле «число» или что-то подобное (Address.street,Address.state).Таким образом, все четыре из этих объектов являются таблицами в базе данных.

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

Name     Phone Number        Street          State
Mack     555-1234            1 Main Street   WA
Andy     222-9999            2 Other Way     RI
Wendy    222-3333            3 Wrong Way     UT

, и я хочу, чтобы таблица сортировалась по штатам, список должен быть:

Name     Phone Number        Street          State
Andy     222-9999            2 Other Way     RI
Wendy    222-3333            3 Wrong Way     UT
Mack     555-1234            1 Main Street   WA

Я хочу, чтобы это былосделано с использованием запроса JPQL, поэтому список уже отфильтрован и отсортирован при передаче на веб-сервер для оптимизации производительности.Я также должен добавить, что я реализую функцию поиска, которая ищет во всех этих «столбцах» определенный термин.

Короче говоря, как мне написать JPQL-запрос, чтобы можно было получить список объектов Personкоторые были отсортированы по одному из этих столбцов?Моя реализация «SELECT DISTINCT»:

SELECT DISTINCT x FROM Person x, IN(x.phones) phones ORDER BY phones.number

не работает, так как таблица результатов требует сортировки столбца (что недопустимо, потому что список не может быть квалифицирован как список объектов Person), и я не могу использовать вложенные операторы SELECT для генерации результирующего набора, а затем извлекать из него список объектов Person.Есть ли простой способ сделать это?

1 Ответ

2 голосов
/ 01 декабря 2011

Извините, но я должен не согласиться.В JPQL вы можете (!) Отсортировать набор результатов без включения отсортированного столбца в результат.

См. Любой пример Hibernate (в качестве реализации реализации JPQL).

Пожалуйста, дайте мне знать, если яМисс понял


SELECT DISTINCT p FROM Person p 
                   JOIN p.addressList adr 
                   JOIN p.emailList eml 
                   JOIN p.phoneList phn
ORDER BY p.name, eml.emailAddress, phn.phoneNumber
...