在偏移前强制排序,在查询中强制最大

时间:2013-07-04 08:27:45

标签: grails criteria

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

1 个答案:

答案 0 :(得分:0)

在查询中使用offset和max时,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;