Java Hibernate criteria.setFetchSize不工作

Java Hibernate criteria.setFetchSize不工作,java,oracle,hibernate,autocomplete,criteria,Java,Oracle,Hibernate,Autocomplete,Criteria,我正在努力提高绩效。我们使用Hibernate标准从数据库(Oracle)检索数据。在我们的应用程序中,我们使用自动完成来检索大量数据。问题发生在我们键入%%(从表中检索所有内容,超过30000条记录)时,数据太多,而浏览器速度会变慢或变慢。 我尝试了criteria.setFetchSize()只加载特定数量的记录,并在达到最大值时再加载一些记录,但由于某些原因,它没有按预期工作(仍然获取整个表)。criteria.setMaxResult()工作正常,但没有必要使用它。 你们知道如何改进这个

我正在努力提高绩效。我们使用Hibernate标准从数据库(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);
  }
public List getDeviceNorderSerial(最终整数偏移量、最终整数限制、最终字符串顺序号){
最终标准=this.createCriteria();
if(StringUtils.hasLength(orderNo)){
criteria.createAlias(“this.orders”、“ord”);
标准.createAlias(“本条”、“ar”);
最终标准serialRestr=Restrictions.ilike(“订单号”,订单号);
标准。添加(serialrest);
final ProjectionList projList=Projections.ProjectionList();
项目列表添加(属性名称(“订单号”),“订单号”);
projList.add(Property.forName(“ar.name”),“name”);
标准。setFirstResult(偏移量);
标准。设置投影(项目列表);
criteria.addOrder(org.hibernate.criteria.Order.asc(“Order.no”);
标准.setResultTransformer(Transformers.ALIAS_TO_ENTITY_映射);
条件。setFetchSize(限制);
}
返回此.criteriaResult(criteria);
}

调用引擎盖下的方法。这只是向数据库驱动程序提示每次数据库往返应该获取多少行。这不会以任何方式限制记录的数量,请改用
标准#setMaxResult
。为什么你不能用这个方法,请解释一下?我已经用过了,但是假设我把这个设置为100,它很好,因为我只得到100条记录,但是剩下的记录在哪里呢。我想在我到达列表底部后自动加载另外100个,以此类推。嗯,也许我的网站有任何误解,或者对此缺乏了解。然后将
setMaxResults
与一起使用。假设第一批记录使用常数
setMaxResults(100)
setFirstResult(0)
,第二批记录使用常数
setFirstResult(100)
,第三批记录使用常数
200
,依此类推。请参阅以了解如何在Hibernate中实现分页。