Используя hibernate ctiteria, я хочу выбрать объект и связанный с ним список объектов oneToMany. Я хочу разбить этот список на страницы, избегая страшной спящей проблемы n + 1 select
Вот рабочее решение, которое требует 11 поездок в базу данных для 10 родительских объектов.
Criteria criteria = this.getSession().createCriteria(Mother.class);
criteria.addOrder(Order.asc("title"))
.setMaxResults(details.getMaxRows())
.setFirstResult(details.getStartResult())
.setFetchMode("kittens", FetchMode.SELECT);
List test = criteria.list();
А вот решение, которое выполняет только одну инструкцию sql (ура), но не может обработать нумерацию страниц, т.е. setMaxResults и setFirstResult некорректны для родительского объекта Mother (boo)
Criteria criteria = this.getSession().createCriteria(Mother.class);
criteria.addOrder(Order.asc("title"))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.setMaxResults(details.getMaxRows())
.setFirstResult(details.getStartResult())
.setFetchMode("kittens", FetchMode.JOIN);
List test = criteria.list();
Это кажется таким распространенным требованием, но я нашел решение без удачи.
Кто-нибудь принимает?