Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Hibernate返回随机结果?_Java_Hibernate - Fatal编程技术网

Java 为什么Hibernate返回随机结果?

Java 为什么Hibernate返回随机结果?,java,hibernate,Java,Hibernate,我想使用Hibernate从数据库中读取数据。我想从第一行开始,读取200行并处理它们,然后读取接下来的200行。但是Hibernate每次都会返回一个随机行 此方法从数据库中读取数据 public List getPages(int start, int end) { Criteria queryCriteria = session.createCriteria(Page.class); queryCriteria.setFirstResult(start).setMaxRes

我想使用Hibernate从数据库中读取数据。我想从第一行开始,读取200行并处理它们,然后读取接下来的200行。但是Hibernate每次都会返回一个随机行

此方法从数据库中读取数据

public List getPages(int start, int end) {
    Criteria queryCriteria = session.createCriteria(Page.class);
    queryCriteria.setFirstResult(start).setMaxResults(end);
    return queryCriteria.list();
}

public void MyFunction(){
    while (readFlag) {

        //get page from database;
        List<Page> pagesList = database.getPages(startFromDatabaseIndex,
                    READ_FROM_DATABASE_SIZE);

        if ((pagesList == null) || (pagesList.size() == 0)) {
            break;
        }
        if (pagesList.size() < READ_FROM_DATABASE_SIZE) {
                readFlag = false;
        } else {
            startFromDatabaseIndex = startFromDatabaseIndex + 200;
        }

        for (int i = 0; i < pagesList.size(); i++) {
             process();
        }
    }
}

要使用分页从数据库中提取数据,您需要定义一个排序标准,根据该标准,您可以定义前200行的含义,否则,非hibernate数据库将以您未定义的顺序返回200行,并且在数据库上的数据经过一些修改后可能会更改。

但是hibernate每次都随机返回行,这是什么意思?您正在执行的查询是什么?除非明确指定顺序,否则数据将以任意顺序返回。RDBMS就是这样工作的;与Hibernate本身无关。谢谢你,它可以工作。我将此代码添加到我的代码中:queryCriteria.addOrderOrder.ascid;如何按添加的顺序检索行?如果id与插入顺序不相等,可以添加创建时间戳并使用它检索数据。在本例中,按两个字段排序,首先创建\u timestamp than id,以确保如果两个记录具有相同的创建时间戳,则不会出现问题
public List getPages(int start, int end) {
    Criteria queryCriteria = session.createCriteria(Page.class);
    queryCriteria.setFirstResult(start).setMaxResults(end);
    return queryCriteria.list();
}

public void MyFunction(){
    while (readFlag) {

        //get page from database;
        List<Page> pagesList = database.getPages(startFromDatabaseIndex,
                    READ_FROM_DATABASE_SIZE);

        if ((pagesList == null) || (pagesList.size() == 0)) {
            break;
        }
        if (pagesList.size() < READ_FROM_DATABASE_SIZE) {
                readFlag = false;
        } else {
            startFromDatabaseIndex = startFromDatabaseIndex + 200;
        }

        for (int i = 0; i < pagesList.size(); i++) {
             process();
        }
    }
}