Критерии гибернации. SetFetchSize не работает - PullRequest
0 голосов
/ 29 августа 2018

Я работаю над улучшением производительности. Мы используем Hibernate Criteria для извлечения данных из базы данных (Oracle). В нашем приложении мы используем автозаполнение для поля ввода, извлекающего много данных. Проблема возникает, когда мы набираем %%% (извлекаем все из таблицы, более 30000 записей), а данных слишком много, а браузер замедляется или зависает. Я попытался criteria.setFetchSize() загрузить только определенное количество записей и загрузить еще несколько, когда мы достигли максимума, но по какой-то причине он не работает должным образом (по-прежнему получая всю таблицу). criteria.setMaxResult() работает нормально, но нет смысла его использовать. Ребята, у вас есть идеи, как улучшить это?

Есть метод:

  public List<Device> getDeviceInOrderSerial(final Integer offset, final Integer limit, final String orderNo) {

    final Criteria criteria = this.createCriteria();
    if (StringUtils.hasLength(orderNo)) {

      criteria.createAlias("this.orders", "ord");
      criteria.createAlias("this.article", "ar");
      final Criterion serialRestr = Restrictions.ilike("ord.no", orderNo);
      criteria.add(serialRestr);

      final ProjectionList projList = Projections.projectionList();
      projList.add(Property.forName("ord.no"), "no");
      projList.add(Property.forName("ar.name"), "name");

      criteria.setFirstResult(offset);
      criteria.setProjection(projList);
      criteria.addOrder(org.hibernate.criterion.Order.asc("ord.no"));
      criteria.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
      criteria.setFetchSize(limit);
    }

    return this.criteriaResult(criteria);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...