在hibernate中实现结果分页(获取总行数)

fly*_*ire 10 java database paging hibernate

如何在Hibernate中实现分页?该Query对象有方法叫setMaxResultssetFirstResult这肯定是有帮助的.但是我在哪里可以得到结果总数,以便我可以显示结果最后一页的链接,并打印结果200到250的xxx

sin*_*pop 15

您可以使用Query.setMaxResults(int results)和Query.setFirstResult(int offset).

编辑:没有办法知道你会得到多少结果.因此,首先您必须使用"select count(*)..."进行查询.有点难看,恕我直言.


non*_*tor 8

您必须执行单独的查询以获得最大结果...并且在客户端第一次发出分页请求的时间A与发出另一个请求的时间B之间,如果添加了新记录或现在是某些记录的情况下符合条件,然后你必须再次查询最大值以反映这一点.我通常在HQL中这样做

Integer count = (Integer) session.createQuery("select count(*) from ....").uniqueResult();
Run Code Online (Sandbox Code Playgroud)

对于Criteria查询,我通常会将数据推送到这样的DTO中

ScrollableResults scrollable = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
if(scrollable.last()){//returns true if there is a resultset
    genericDTO.setTotalCount(scrollable.getRowNumber() + 1);
    criteria.setFirstResult(command.getStart())
            .setMaxResults(command.getLimit());
    genericDTO.setLineItems(Collections.unmodifiableList(criteria.list()));
}
scrollable.close();
return genericDTO;
Run Code Online (Sandbox Code Playgroud)