Принудительный порядок перед смещением и максимумом в запросе

У меня есть запрос в 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 ответ

Сортировка уже правильно обрабатывается 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;
Другие вопросы по тегам