Я работаю над улучшением производительности. Мы используем 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);
}