Hibernate Result Transformer не работает для Critera.scroll - PullRequest
0 голосов
/ 28 апреля 2018

Сущность ObjA имеет отношение «один ко многим» с другой сущностью ObjB.

Следующий код в моем дао работает как положено:

Session session = getSessionFactory().openSession();
Criteria criteria = session.createCriteria(ObjA);
//......
criteria.setReadOnly(true);
criteria.setCacheable(false);
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List<ObjA> results = criteria.list();

Чтобы оптимизировать приведенный выше код (чтобы избежать OutOfMemoryException), я попытался использовать ScrollableResults вместо criteria.list():

//same as above code..
ScrollableResults results = criteria.scroll(ScrollMode.FORWARD_ONLY);
while(results.next()){
    ObjA a = results.get()[0];
    session.evict(a); 
    //store 'a' in a collection
}

Однако, используя этот подход, я получил отдельные строки для каждого ObjB, соответствующего ObjA (в некотором смысле, дублирующие корневые сущности). Я пытался не выселить сущность, но все равно получил повторяющиеся строки.

Есть идеи, что я делаю неправильно / отсутствует здесь?

P.S. Версия Hibernate - 3.5.1-FINAL

1 Ответ

0 голосов
/ 01 мая 2018

Похоже, что это нескончаемая ошибка / необходимое улучшение в спящем режиме. В итоге я использовал fetch="select" для всех соединений «один ко многим».

Хотя это увеличило количество запросов к базе данных, но удалило дублирующиеся корневые объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...