Вы можете использовать ScrollableResults из спящего режима
Что-то вроде:
ScrollableResults results = session.createCriteria(Project.class)
.add(Restrictions.eq("projectType", Constants.REINDEX.PROJECT_TYPE))
.setFetchSize(10)
.scroll(ScrollMode.FORWARD_ONLY);
while (results.next()) {
project = (Project) results.get(0);
Если вы просматриваете огромное количество сущностей, вам, вероятно, также следует очистить ваш сеанс время от времени, иначе вы можете исчерпать память.
Дополнительную информацию можно найти в документации 10.4.1.6. Прокручиваемая итерация и, как они ее написали, вы должны использовать нумерацию страниц, если не хотите, чтобы ваше соединение оставалось открытым.