Hibernate - разбиение на страницы Java - Исключение из-за недостатка памяти - PullRequest
1 голос
/ 01 апреля 2011

Я использую следующий фрагмент кода для получения результатов из БД, так как набор результатов огромен.

Это правильный путь? Я использую исключение "Недостаточно памяти" и подозреваю, что это из-за этого.

// div is set to 10,000
// i have calculated how many times i need do it using a count query
// and that value is being used in iteration variable

Query bigQ=session.createSQLQuery(bigQuery);

for(int i=0;i<iteration;i++)    
{
    bigQ.setFetchSize(div);                         
    bigQ.setMaxResults(i*div);

    List<Object[]> result=bigQ.list();

    // now i am using the result to get the values 
    for(Object[] a:result)
    {
        // rest of operations
    }
}   

Примечание:

  1. Я установил достаточно Xms и -Xmx в jboss run.conf.
  2. Я не могу использовать набор прокрутки, так как драйвер postgre его не поддерживает.
  3. Я не могу использовать createQuery, так как в этом случае hibernate генерирует множество запросов, поэтому я использую большой запрос на соединение вместе с createSQLQuery.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Ваш код выглядит странно - правильный способ разбить результаты на страницы будет следующим:

bigQ.setFirstResult(i * div);
bigQ.setMaxResults(div);

Также убедитесь, что кэш сеанса не растет - если ваш запрос возвращает только скалярные значения (не сущности)это не должно быть проблемой, но если вы загрузите некоторые объекты в // rest of operations, это возможно.

0 голосов
/ 01 апреля 2011

Использовать смещение и предел ... http://www.petefreitag.com/item/451.cfm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...