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 に答える