В целях обработки очень больших коллекций (и под очень большими я просто подразумеваю «с большой вероятностью выбросить исключение OutOfMemory»), использование Hibernate кажется проблематичным, потому что обычно извлечение коллекции выполняется в блоке, т.е. createQuery ("from X"). list (), где вы монолитно собираете все N миллионов значений и затем обрабатываете их.
Что бы я предпочел сделать, это получить значения как итератор, чтобы я мог получить 1000 или около того (или любой другой размер страницы) за раз. Помимо написания моей собственной итерации (которая, похоже, будет заново изобретать колесо), есть ли спящий способ, чтобы справиться с этим?