内部查询中的Hibernate和rownum

时间:2010-02-24 23:06:16

标签: java oracle hibernate

我在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)

我能弄清楚如何做到这一点的唯一方法是将查询分成两部分,但我认为必须有一种更有效的方法在hibernate中执行它。

提前致谢。

迈克尔。

1 个答案:

答案 0 :(得分:1)

您的查询不会过滤最近的10条记录。它将返回10个随机记录(随机顺序不可靠),因为没有ORDER BY子句。

我不熟悉hibernate的局限性,但与所有限制工具一样,我非常确定你可以通过深思熟虑的视角解决它们。

例如,此视图将包含一个排名列,可用于根据排序列(event_name, event_source)过滤event_date任意组合的10条最新记录:

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;