Пагинация критериев гибернации

Мне нужно добавить «разбиение на страницы» в списке класса. Эдж:

Class A
  List B

поэтому мне нужно ограничить список B определенным значением

Что я делаю (используя критерии, и все это динамично):

ICriteria criteria = Session.createCriteria();

ICriteria criteriaParcial = criteria.CreateCriteria("B");

criteriaParcial.SetFirstResult(0).SetMaxResults(10);

criteria.list();

Это пример, на самом деле код является динамичным и итеративным.

Этот механизм работает для поиска значений фильтрации, но не для разбивки на страницы.

Любая идея? Танки

Обновлено !!!

Этот подход не работает, потому что выполнение этого метода criteria.CreateCriteria("B").setMAxResults(10) изменяет корневые критерии, а не подкритерии, как я думал.

Так что теперь моя подсказка. Можно ли ограничить список внутри класса или разбить его на страницы?

Примерно так: у меня есть класс Person со списком адресов, поэтому я хочу загрузить Person, но только два первых объекта внутри списка адресов.


person aivaldi    schedule 28.06.2012    source источник
comment
Что именно вы имеете в виду под поиском работ, значения фильтрации, а не с разбивкой на страницы?   -  person Miroslav Popovic    schedule 29.06.2012
comment
Я имею в виду, что вместо того, чтобы устанавливать значения SetFirstResult и т. Д., Я установил такое ограничение .add(Restrictions.eq("B", new B("somthing"))) он работает и выполняет фильтрацию, точно такой же код.   -  person aivaldi    schedule 29.06.2012
comment
Если вы используете активную выборку, попробуйте отключить ее, так как это может привести к странным результатам при подкачке страниц. Кроме того, когда я знаю, что могут возникнуть проблемы с нетерпеливой выборкой, я предпочитаю использовать критерииParcial.SetResultTransformer (NHibernate.Transform.Transformers.DistinctRootEntity) .List () вместо простого List ()   -  person jbl    schedule 29.06.2012
comment
Я обнаружил свою проблему. Я пытаюсь пролистать список внутри своего класса, но «criterionParcial.SetMaxResults (10)» изменяет корневой критерий, а не сам список. Так что этот подход не работает   -  person aivaldi    schedule 29.06.2012


Ответы (1)


Это невозможно, AFAIK. Но в любом случае подход неверен. Лучше загрузить данные корневого объекта, а в другом запросе загрузить подсписки, чтобы вы могли разбивать на страницы фильтр и сортировать по своему усмотрению.

Свойства списка не были созданы для того, чтобы они хорошо отображались, они просто должны содержать список объектов и того, что они делают. Вот почему создание другого запроса, который возвращает только эти элементы, - лучший подход.

Вы можете использовать запросы Future ‹> для повышения производительности БД.

person Diego Jancic    schedule 29.06.2012
comment
Если это невозможно, по крайней мере, нативно, мне нужно будет сделать что-то вроде того, что вы сказали. - person aivaldi; 29.06.2012
comment
да. Это также даст вам гораздо больше возможностей для вашего приложения, поскольку вы не будете ограничены в вариантах ваших запросов. - person Diego Jancic; 29.06.2012