Избегайте огромной коллекции идентификаторов, вызывая DAO.getAll () - PullRequest
2 голосов
/ 08 апреля 2010

Вместо того, чтобы возвращать List<Long> идентификаторов при вызове PersonDao.getAll(), мы хотели, чтобы в памяти не было всей коллекции идентификаторов.

Похоже, что возвращаем org.springframework.jdbc.support.rowset.SqlRowSet, и итерация по этому набору строк не будетудерживайте каждый объект в памяти.

Единственная проблема в том, что я не могу привести эту строку к своей сущности.

Есть ли лучший способ для этого?

Как правило, мы хотимсделать метод на каждого человека в нашей базе данных

1 Ответ

1 голос
/ 08 апреля 2010

Вы можете использовать ScrollableResults для перебора набора результатов и регулярно очищать сеанс, чтобы избавиться от ненужных объектов. Пример из книги Hibernate:

ScrollableResults itemCursor = session.createQuery("from Item").scroll();
int count=0;

while ( itemCursor.next() ) {
  Item item = (Item) itemCursor.get(0);
  modifyItem(item);
  if ( ++count % 100 == 0 ) {
    session.flush();
    session.clear();
  }
}

См. ссылку на Hibernate для получения дополнительных примеров и подробностей.

...