При обработке большого количества сущностей в большом коде проекта на основе экземпляров List<E>
мне приходится писать действительно ограниченную реализацию List с поддержкой только Iterator
для просмотра ScrollableResults
без рефакторинга всех реализаций служб и прототипов методов.использование List<E>
.
Эта реализация доступна в моем IterableListScrollableResults.java Gist
Он также регулярно сбрасывает сущности Hibernate из сеанса.Вот способ его использования, например, при экспорте всех неархивированных объектов из БД в виде текстового файла с циклом for
:
Criteria criteria = getCurrentSession().createCriteria(LargeVolumeEntity.class);
criteria.add(Restrictions.eq("archived", Boolean.FALSE));
criteria.setReadOnly(true);
criteria.setCacheable(false);
List<E> result = new IterableListScrollableResults<E>(getCurrentSession(),
criteria.scroll(ScrollMode.FORWARD_ONLY));
for(E entity : result) {
dumpEntity(file, entity);
}
В надежде, что это поможет