Hibernate и rownum во внутреннем запросе - PullRequest
0 голосов
/ 25 февраля 2010

У меня есть следующий запрос в oracle, который я хочу использовать в hibernate, но не могу понять, как использовать переменную rownum во внутреннем запросе. Запрос выглядит следующим образом:

select emp.prof_key, emp.prof_display_name
from empinst.emp emp
where emp.prof_key IN (select x.object_key
                   from (select event.object_key as object_key
                         from empinst.eventlog event
                         where event.event_name = 'profiles.created'
                         and event.event_source = 'Profiles'
                         order by event.created desc) x
                   where rownum <= 10)

Единственный способ понять, как это сделать, - разбить запрос на две части, но я предполагаю, что должен быть более эффективный способ сделать это в спящем режиме.

Заранее спасибо.

Майкл.

1 Ответ

1 голос
/ 25 февраля 2010

Ваш запрос не будет фильтровать 10 самых последних записей. Он вернет 10 случайных записей (случайных, как в ненадежном порядке), поскольку отсутствует предложение ORDER BY.

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

Например, это представление будет содержать столбец ранга, который можно использовать для фильтрации 10 самых последних записей для любой комбинации (event_name, event_source) на основе столбца заказа event_date:

CREATE VIEW eventlog_rank_v AS 
SELECT e.*, 
       row_number() OVER (PARTYTION BY e.event_name, 
                                       e.event_source 
                          ORDER BY e.event_date DESC) event_rank
  FROM empinst.eventlog e;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...