为什么getFirstResult()和getMaxResults()没有从数据库中返回第x行到第y行的块?

时间:2018-04-07 04:06:00

标签: java mysql hibernate

在我的数据库中有以下行

article  lang     timestamp
0       English   2018-04-07 03:34:49 
1       English   2018-04-07 03:34:50
2       English   2018-04-07 03:34:51
3       English   2018-04-07 03:34:52
4       English   2018-04-07 03:34:53
5       English   2018-04-07 03:34:54
6       English   2018-04-07 03:34:55
7       English   2018-04-07 03:34:56
8       English   2018-04-07 03:34:57
9       English   2018-04-07 03:34:58
10      English   2018-04-07 03:34:59

我的查询如下

Query query = session.createQuery("select a from Article a where a.lang=:lang ORDER BY a.timeStamp ASC");
        query.setParameter("lang", lang);
        query.setFirstResult(startingRow);
        query.setMaxResults(endingRow);
        List<Article> result = (List<Article>) query.list(); 
        if(result.listIterator().hasNext()) {
            return result;
        }

当我发送startingRow为0和endingRow为4时,我希望结果为

0 
1 
2 
3

当我发送startingRow为5和endingRow为9时,我希望结果为

4 
5 
6 
7

但它没有像我预期的那样出现。 它以随意的方式返回重复记录。 我在这里做错了什么?

我的要求是,我希望结果(记录)在我正在寻找的序列中。例如,如果我需要记录55到65,那么我需要那些记录。

PS:我尝试使用query.setFetchSize(5),但它一次性返回所有记录。我做了一些研究,发现如果驱动程序不支持setFetchSize(),它将无法正常工作。

1 个答案:

答案 0 :(得分:0)

确定。这就是我解决它的方式。

Hibernate让你通过

来解决这个问题

query.setFirstResult(startingRow).setMaxResults(5);

其中startingRow是第x行,并且从该行返回下一个n(此处为5)记录。