我在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 ?
答案 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;