我们如何使用 JPA 计算 LAST 页面?
Posted
技术标签:
【中文标题】我们如何使用 JPA 计算 LAST 页面?【英文标题】:How can we compute the LAST page with JPA? 【发布时间】:2010-06-16 12:50:48 【问题描述】:我想在我的 Servlet/EJB/JPA-Hibernate 项目中实现分页,但我无法弄清楚查询中只有一页,也不知道我必须显示的页数
我用
setFirstResult(int first) ;
setMaxResults(int max) ;
这没问题,但我怎么知道我总共会有多少页?
(Hibernate 是我的 JPA 提供程序,但如果可能,我宁愿只使用 JPA)
更新: COUNT() 似乎是更好/最简单的解决方案;
但是SELECT COUNT(*) FROM ...
的成本与
executeQuery("SELECT * FROM ...).getListResult().size()
?
【问题讨论】:
另请参阅此问题:***.com/questions/168084/… 【参考方案1】:AFAIK,您需要 (1) 计数或 (2) 检索完整的命中列表并在内存中进行分页。页数是总计数/页面大小的四舍五入。
有几种计算方法,一种是使用COUNT(*)
,就像在
Query query=em.createQuery("SELECT COUNT
(emp.empName) FROM Employee emp");
或者另一个是使用投影
criteria.setProjection(Projections.rowCount());
int rowCount = (Integer) criteria.list().get(0);
请注意,我从来没有使用过这个,我只是在某个地方读到过。
我在这个答案中记录了一些关于分页的其他细节:
client side sorting + hibernate paging希望对你有帮助
【讨论】:
以上是关于我们如何使用 JPA 计算 LAST 页面?的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 Spring 使 JPA(Hibernate)和 JDBC(JdbcTemplate 或 MyBatis)共享同一个事务