2011-05-17 2 views
2

Я хотел бы иметь возможность разбивать результаты моей базы данных на что-то наподобие CriteriaBuilder, но мне нужны мои результаты, чтобы быть последовательными в отношении одного момента времени.Результаты поиска базы данных Grails palinate по той же транзакции?

Есть простой способ как-то постраничной и сохранить выбор в пределах одной и той же транзакции/

+0

Очевидно, что вы могли бы сделать это, сохраняя все результаты в кэше (например, сеанс), но это поражение одно из основных преимуществ разбивки на страницы, т. е. только получение требуемых записей. Хороший вопрос, ожидая более полезных ответов, чем этот. –

ответ

1

Вы отбрасывается, чтобы сохранить весь набор результатов в памяти с помощью ScrollableResult?

Look here

DomainObject.createCriteria().scroll{} возвращает ScrollableResult

+0

Как я могу использовать это внутри grails? Это то, что мне нужно, но я хотел бы указать размер группировки результатов. –

+0

Извините, я не могу помочь вам с граалем. В спящем режиме вы можете перемещаться или просто перебирать коллекцию. – ssedano

+1

Документация Grails содержит информацию о том, как получить прокручиваемый ResultSet из запроса Criteria: http://grails.org/doc/latest/ref/Domain%20Classes/createCriteria.html – Ruben

-2

Укажите смещение вы хотите в критериях, на основе в номер текущей страницы.

def results = DomainClass.withCriteria { 
    firstResult ((currentPageNumber - 1) * itemsPerPage) 
    maxResults (itemsPerPage) 
} 

Чтобы узнать общее количество страниц, вам нужен другой запрос:

def numberOfPages = DomainClass.count() 
if(numberOfPages != 0) numberOfPages = numberOfPages/itemsPerPage + 1 
+0

Все это происходит в одной транзакции? –

+0

Да, он не загружает строки, находящиеся за пределами указанного диапазона. – Gabriel

+0

Я не совсем уверен, что вы понимаете, что я имею в виду. Если строка 11 обновляется, когда я извлекаю строки 1-10, я не хочу обновления. –

Смежные вопросы