Java Hibernate:条件忽略fetchSize参数并获取的行数超过要求的行数

Java Hibernate:条件忽略fetchSize参数并获取的行数超过要求的行数,java,spring,hibernate,criteria,hibernate-criteria,Java,Spring,Hibernate,Criteria,Hibernate Criteria,我正在开发一个SpringMVC应用程序,其中有一个使用条件编写的搜索函数。对于分页搜索,我从前端获取firstResult和fetchSize作为参数。不幸的是,当只要求20行时,Criteria会忽略它们并返回一个巨大的列表(大约1000行)。出什么事了 代码: System.out.println("Fetch size is "+fetchSize); System.out.println("First result is "+firstResult); Criter

我正在开发一个SpringMVC应用程序,其中有一个使用条件编写的搜索函数。对于分页搜索,我从前端获取firstResult和fetchSize作为参数。不幸的是,当只要求20行时,Criteria会忽略它们并返回一个巨大的列表(大约1000行)。出什么事了

代码:

  System.out.println("Fetch size is "+fetchSize);
        System.out.println("First result is "+firstResult);
Criteria andCriteria = session.createCriteria(Host.class);
            Conjunction and = Restrictions.conjunction();
            if((studentSearchHistory.getCity()!=null) && (!(studentSearchHistory.getCity().isEmpty()))) {
                and.add(Restrictions.ilike("city", studentSearchHistory.getCity()));
            }
//Other search conditions
    andCriteria.setFetchSize(fetchSize);
    andCriteria.setFirstResult(firstResult);
    andCriteria.add(and);
    hostList.addAll(andCriteria.list());
  if(hostList != null){
     System.out.println("Host list size is "+hostList.size());
   }
输出:

Fetch size is 10
First result is 0
Host list size is 1003

我做错了什么?多谢各位

也许您应该在这里使用
setMaxResults


是这两种方法的比较。

fetchSize
与查询导出的记录数无关。它与获取的记录数有关

您需要使用来限制hibernate检索的记录数

设置要检索的最大行数。如果未设置,则检索的行数没有限制

仅与如何在内部休眠获取记录组(是一种缓存)有关

为基础JDBC查询设置获取大小

根据以下描述:

当此语句生成的ResultSet对象需要更多行时,向JDBC驱动程序提示应从数据库中提取的行数。如果指定的值为零,则忽略提示。默认值为零


尝试
criteria.setMaxResults(n)