Сущность 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