我们如何使用 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 页面?的主要内容,如果未能解决你的问题,请参考以下文章

使用具有一对多关系的 JPA 映射实体,如何添加连接条件

您将如何使 JPA 2.1 模块独立于 JPA 实现?

如何配置 Spring 使 JPA(Hibernate)和 JDBC(JdbcTemplate 或 MyBatis)共享同一个事务

Spring Boot : ORM 框架 JPA 与连接池 Hikari

首屏,白屏时间如何计算??

如何使页面仅在移动设备上响应[关闭]