В вашем фрагменте кода отсутствуют важные фрагменты, такие как определения resultSet
и page
. Но мне все равно интересно, разве линия не должна
if (resultSet.next())
будь скорее
if (sr.next())
В качестве примечания, AFAIK, очищающий лишние объекты от контекста постоянства, может быть достигнут простым вызовом
session.flush();
session.clear();
вместо циклического перебора коллекции объектов для выселения каждого отдельно. (Конечно, для этого требуется, чтобы запрос выполнялся в своем независимом сеансе.)
Обновление: ОК, следующий раунд догадок: -)
Можете ли вы на самом деле проверить, какие строки отправляются клиенту, и сравнить их с результатом эквивалентного SQL-запроса непосредственно с БД? Было бы хорошо узнать, получает ли этот код (и отправляет ли клиенту все строки до определенного предела, или только несколько строк (как каждый второй) из всего набора результатов, или ... которые могут пролить свет на корень причина.
Еще одна вещь, которую вы можете попробовать это
crit.setFirstResults(0).setMaxResults(200000);