2014-03-24 5 views
0

Прошу прощения, если это тривиальный вопрос, но я хочу выяснить правильный путь. Существует большая таблица «учетная запись» (около 10000 записей). Я хочу, чтобы итерация через него выполняла некоторую логику с сущностью и объединила ее при необходимости. Но я не хочу загружать все записи в память.Весна MVC + загрузка спящего режима с db

В настоящее время я делаю это

List<Account> accounts = accountsDAO.all(); 
for (Account a: accounts) { 
    doSomeCode(a); 
    accountsDAO.merge(a); 
} 

Как я могу это исправить?

+0

В какой базе данных вы используете? – Wolfram

+0

PostgreSQL 9.3. Это важно? – Yanis

+0

Какая у вас проблема с этими 10000 записями? Это занимает слишком много времени или памяти? Это не слишком тяжело. Если это дочерний элемент какого-либо другого родительского объекта, вы можете загрузить его лениво. – Jay

ответ

1

Посмотрите на setFirstResult и setMaxResults, чтобы сделать это довольно вручную и с довольно явными запросами (думаю, что предложение SQL LIMIT).

Существует также setFetchSize, чтобы предоставить драйвер/базу данных результаты неограниченного запроса (example in the PostgreSQL JDBC docs). ScrollableResults кажется весьма похожим (относительно использования по крайней мере): вы получаете итератор результата для прокрутки совпадающих записей (example in a random blog post).

Что касается моего вопроса, какая база данных вы используете: Существуют различия между базами данных и/или драйверами. Я не знаю специфики здесь, но некоторые функции, касающиеся загрузки кусков, должны поддерживаться соответствующим драйвером DB.

Смежные вопросы