Hibernate:Criteria忽略fetchSize参数并获取比询问更多的行

时间:2016-09-09 09:56:39

标签: java spring hibernate criteria hibernate-criteria

我正在开发一个Spring-MVC应用程序,其中我使用Criteria编写了一个搜索函数。对于分页搜索,我从前端获得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

我做错了什么?谢谢。

2 个答案:

答案 0 :(得分:1)

也许你应该在这里使用 #include <stdio.h> int main() { char* inputstr = "HTTP/1.0 200"; int response = 0; / * On success, the sscanf returns the number of variables filled. * In the case of an input failure before any data could be * successfully read, EOF is returned. */ if(sscanf (inputstr, "HTTP/1.0 %d", &response) == 1) printf ("response code %d\n",response); else printf ("It failed"); return 0; }

Here是对这两种方法的比较。

答案 1 :(得分:1)

import com.tableausoftware.TableauException; import com.tableausoftware.common.*; import com.tableausoftware.server.*; public class PublishOrder { public static void main( String[] args ) { try { // Initialize Tableau Server API ServerAPI.initialize(); // Create the server connection object ServerConnection serverConnection = new ServerConnection(); // Connect to the server serverConnection.connect("https://xxx.online.tableau.com", "xxx@example.com", "xxx", "xxx"); // Publish order-java.tde to the server under the default project with name Order-java serverConnection.publishExtract("order-java.tde", "default", "Order-java-ubuntu", false); // Disconnect from the server serverConnection.disconnect(); // Destroy the server connection object serverConnection.close(); // Clean up Tableau Server API ServerAPI.cleanup(); } catch (TableauException e) { e.printStackTrace(); } } } 与查询导出的记录数无关。它与获取的记录数有关。

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

  

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

setFetchSize仅与内部hibernate如何获取记录组(是一种缓存)有关。

  

设置基础JDBC查询的获取大小。

来自Statement的描述:

  

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