Лучший способ использовать hibernate для сложных запросов, таких как top N на группу - PullRequest
2 голосов
/ 06 марта 2009

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

  1. Запросы приводят только к частичным столбцам и, следовательно, не типизированным объектам. (если вы не разыгрываете все поля в Java).
  2. Трудно выражать запросы, не переходя прямо в sql или HQL.

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

Результат должен выглядеть следующим образом:

| RowName | 1-1-2009 | 2-1-2009 | 3-1-2009 | 4-1-2009 | 5-1-2009
| SomeName| 1        | 42       | 34       | 32       | 35

Каков наилучший подход для преобразования данных, которые хранятся в день на строку, в такой вывод? Не пора ли вернуться к обычному sql и работать с нетипизированными данными?

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

1 Ответ

1 голос
/ 26 апреля 2009

Используя Criteria API, вы можете сделать это:

Session session = ...;
Criteria criteria = session.createCriteria(MyClass.class);
criteria.setFirstResult(1);
criteria.setMaxResults(5);
... any other criteria ...
List topFive = criteria.list();

Чтобы сделать это в ванильном SQL (и чтобы убедиться, что Hibernate делает то, что вы ожидаете), проверьте этот пост SO :

...