java - 使用涉及复杂标准的 JPA Criteria API 进行分页

标签 java spring jpa criteria-api

我正在尝试使用 JPA 标准 API 对结果进行分页。浏览完这个答案后:Total row count for pagination using JPA Criteria API

我发现这样做的方法是创建一个单独的查询来计算该特定条件查询返回的行数。 (他们通过创建谓词数组并为计数查询和实际分页查询使用相同的列表来实现此目的)。

但是,我的条件查询无法通过简单的谓词列表来复制,因为它涉及与其他表和谓词的许多联接,涉及与子查询返回的结果进行比较。

我想知道是否有一种方便的方法来获取特定条件查询的行数而不重复查询。 (或者是否有一种简单的方法可以通过传入引用来获取条件查询的深拷贝)

提前致谢!

最佳答案

执行此操作的“便捷方法”是求助于 native SQL 并使用窗口函数。您可以轻松地将窗口函数添加到顶级 SELECT 中,该函数只需对所有行进行计数,如下所示:

SELECT x, y, ..., COUNT(*) OVER()
FROM ...

通过使用 SQL 而不是 JPQL/Criteria API,您将可以访问各种其他非常有用的功能,例如上面的功能。

关于java - 使用涉及复杂标准的 JPA Criteria API 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50084567/

相关文章:

java - 由 : org. h2.jdbc.JdbcSQLDataException 引起:十六进制字符串包含非十六进制字符

java - ReactFX Val,如何获得空状态的绑定(bind)?

java - 如何获取视频/音频信息,例如持续时间和高度?

java - 如何在类图 (UML) 中显示方法是同步的?

java - @ManyToMany 三个表之间的关系

java - spring-ws 获取用户名和密码

java - 我不想从 axboot 记录 jpa 查询

java - Hibernate/JPA 查询,其中包含列表字段中元素的条件(称为 OneToMany)

java - Spring Batch - 动态作业选择

java - 仅在 java 中使用数组计算 50 的阶乘