Использование setMaxResults() не решило OutOfMemoryError при получении данных

Хотя я прочитал несколько статей и вопросов, опубликованных здесь, я все еще не могу понять, как criteria.setMaxResults() на самом деле работает и почему это не решило мою проблему.

База данных, которую я использую - Oracle10g. Приведенный ниже код используется для медленной загрузки страниц, и ему нужно выбрать 15 строк на страницу, поэтому pageSize = 15 а также index зависит от того, на какой странице вы находитесь. Для первой страницы это 0, Общее количество строк в таблице составляет 60 тыс.

public List<FormObject> fetchFormByParams(FormObjectParameters parameters, int pageSize, int index) {
    Session session = getCurrentSession();
    Criteria criteria = criteriaFromParameters(false, parameters, session);

    if (pageSize > 0) {
        criteria.setMaxResults(pageSize);
        criteria.setFirstResult(index);
    } else {
        criteria.setMaxResults(Integer.MAX_VALUE);
        criteria.setFirstResult(0);
    }

    List<FormObject> result = (List<FormObject>) criteria.list(); //line 163
    return result;
}

Когда строка 163 выполняется, требуется 30-45 секунд, пока приложение не вернет 15 строк, а иногда выдает OutOfMemoryError, Кроме того, когда данных в БД было меньше (менее 100), приложение возвращает 15 строк за пару секунд. Не знаю, почему это происходит, если я использую ленивую нагрузку и setMaxResults(),

Я тоже пробовал с setFetchSize() но это не сработало для меня, и он вернул все строки из БД, так как он не использовал ROWNUM, Возможно, что-то связано с драйвером, который я использую, но, к сожалению, мне не разрешено его менять.

0 ответов

Другие вопросы по тегам