在hibernate中设置最大结果不符合要求

时间:2013-12-20 07:16:44

标签: java hibernate java-ee

这是我的查询
使用HQL编写的。我的要求如下。 我有45条记录,我想每次获取10条记录。它最多可成功记录40条记录。但是从41-45条记录中,查询返回空列表。

query1 = session
                    .createQuery(
                            "FROM mongo c where "
                                    + "c.ad='555rs5' and "
                                    + "c.cId='44444sf' and "
                                    + "c.langId='59ecc8' and c.date < '"
                                    + tempDate + "' ORDER BY -date")
                    .setMaxResults(10); 

我的查询中有什么问题吗?请告诉我。
问候
Naresh Veluri

2 个答案:

答案 0 :(得分:1)

对于Hibernate分页,在setMaxResults()方法旁边,您还需要setFirstResult()方法。查看this page.

答案 1 :(得分:0)

我猜你的循环肯定存在问题。

根据K.C.回答你没有设置setFirstResult()我不知道你的查询如何获取下一个记录。阅读Hibernate Doc - setFirstResult()

Query setFirstResult(int firstResult)
Set the first row to retrieve. If not set, rows will be retrieved beginnning from row 0.
Parameters:
firstResult - a row number, numbered from 0

尝试下面的代码希望这可以帮助您解决问题。

boolean flag = true;
    int firstResult = 0;
    int pageSize = 10;
    int maxResult = 10;

    while(flag) {
        query1 = session.createQuery("FROM mongo c where "
                                        + "c.ad='555rs5' and "
                                        + "c.cId='44444sf' and "
                                        + "c.langId='59ecc8' and c.date < '"
                                        + tempDate + "' ORDER BY -date");
        query1.setFirstResult(firstResult);                 
        query1.setMaxResults(maxResult);
        List<mongo> = query1.list();
        //terminate loop if list is empty or records less than pagesize.
        if(list.isEmpty() || list.size() < (maxResult-firstResult)) {
            flag = false;   
        } else {
            firstResult = firstResult + pageSize;
            maxResult = maxResult + pageSize;
        }   
    }