Скажем, у меня есть таблица с миллионами строк. Используя JPA, каков правильный способ итерации над запросом к этой таблице, чтобы у меня не было всего списка в памяти с миллионами объектов?
Например, я подозреваю, что следующее число будет взорвано, если таблица большая:
List<Model> models = entityManager().createQuery("from Model m", Model.class).getResultList();
for (Model model : models)
{
System.out.println(model.getId());
}
Является ли pagination (циклическое и ручное обновление setFirstResult()
/setMaxResult()
) действительно лучшим решением?
Изменить: основной пример использования, на который я нацелен, является своего рода пакетным заданием. Это нормально, если требуется много времени для запуска. Нет веб-клиента; Мне просто нужно "сделать что-то" для каждой строки, одной (или некоторой маленькой N) за раз. Я просто пытаюсь избежать одновременного использования их всех в памяти.