我正在尝试使用 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/