0

我在 Grails 中有一个使用createCriteria(). 如何强制对结果执行排序,然后应用偏移量和最大约束。

代码:

def history = Termin.createCriteria().list([max:10, offset:offset]) {
    and{
//some query constraints
}
   order('id', 'desc')
}

这可能会做同样的事情:

def history = Termin.createCriteria().list([max:10, offset:offset,order:'desc',sort:'id']) {
            and{
        //some query constraints
        }
}

数据库是 postgreSQL 7.5,构建的查询如下所示:

select
   something
from
   somewhere 
left outer join
    something
       on something
left outer join
   something
        on something 
left outer join
    something
        on something
where
    (
        something
    ) 
order by
    this_.th_id desc limit ? offset ?
4

1 回答 1

0

在查询中使用偏移量和最大值时,Hibernate 已经正确处理了排序。

如果启用输出,您将看到生成的查询。例如,在 Oracle 中,他们做了一个技巧,因为它不包含这个用于查询的函数。

生成的查询示例:

select * from 
( select a.*, ROWNUM rnum from 
  ( <your_query_goes_here, with order by> ) a 
  where ROWNUM <= :MAX_ROW_TO_FETCH )
where rnum  >= :MIN_ROW_TO_FETCH;
于 2013-07-04T12:15:47.620 回答