Как сгруппировать выбранные данные? - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть comments таблицы, из которых я хочу выбрать и сгруппировать комментарии по внешнему ключу profile_id.

Я использую jpa 2 / hibernate, и таблицы имеют отношение «один ко многим» от profile до comment.

В настоящее время SQL-запрос возвращает список комментариев, и благодаря связи «многие-к-одному» я получаю профиль для каждого комментария.

Буду признателен за помощь в ответе на следующие вопросы относительно сортировки после и после выполнения запроса:

  1. Как можно отсортировать возвращенный список комментариев, например List<Comment>, по profile_id (внешнему ключу) таблицы comments или id (первичному ключу) таблицы profile?
  2. Как я могу / должен создать свой SQL-запрос для сортировки комментариев по профилю?
  3. Какой из двух методов - до или после сортировки - является лучшей практикой?

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

«сортировка» (post sort) будет выполняться java в памяти, а «order by» (предварительная сортировка) будет выполняться rdbms. Разрешение rdbms делать это с SQL более эффективно в большинстве случаев. Сортировка java будет управляться методом сравнения любого объекта, который вы сортируете

SQL так же просто, как добавить предложение по предложению к вашему HQL следующим образом:

from Comments order by profile_ID

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

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

чтобы ваши результаты сортировались в памяти по java, вы можете сопоставить коллекцию комментариев как SortedMap или SortedSet

@org.hibernate.annotations.Sort(
     type=org.hibernate.annotations.SortType.NATURAL
)
private SortedSet<Comment> comments = new TreeSet<Comment>();

"NATURAL" в этом случае будет ожидать, что класс Comment будет гарантировать, что комментарии были отсортированы по profile_id с помощью метода compareTo.

вы также можете использовать SortType.CoMPARATOR для еще большего контроля, если ваш класс комментариев реализует компаратор.

ссылка: Java Persistence с Hibernate и http://henko.net/imperfection/sorted-collections-in-hibernate/

1 голос
/ 15 февраля 2011

Пусть база данных сделает все за вас: это очень эффективно.

HQL для этого очень прост:

select c from Comment c order by c.profile.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...