使用涉及复杂条件的 JPA 条件 API 进行分页
Pagination with JPA Criteria API involving complex criteria
我正在尝试使用 JPA 标准对结果进行分页 API。看完这个答案后:Total row count for pagination using JPA Criteria API
我看到这样做的方法是创建一个单独的查询来计算该特定条件查询返回的行数。 (他们通过制作一个谓词数组并为计数查询和实际分页查询使用相同的列表来做到这一点)。
但是,我的条件查询无法通过简单的谓词列表复制,因为它涉及与其他表的许多连接以及涉及与子查询返回结果进行比较的谓词。
我想知道是否有一种方便的方法可以在不重复查询的情况下获取特定条件查询的行数。 (或者如果有一种简单的方法可以通过传入引用来获取条件查询的深层副本)
提前致谢!
这样做的"convenient way"是求助于本机SQL并使用window功能。您可以轻松地向顶层 SELECT
添加 window 函数,它简单地计算所有行,如下所示:
SELECT x, y, ..., COUNT(*) OVER()
FROM ...
通过使用 SQL 而不是 JPQL / Criteria API,您将可以使用其他各种非常有用的功能,例如上述功能。
我正在尝试使用 JPA 标准对结果进行分页 API。看完这个答案后:Total row count for pagination using JPA Criteria API
我看到这样做的方法是创建一个单独的查询来计算该特定条件查询返回的行数。 (他们通过制作一个谓词数组并为计数查询和实际分页查询使用相同的列表来做到这一点)。
但是,我的条件查询无法通过简单的谓词列表复制,因为它涉及与其他表的许多连接以及涉及与子查询返回结果进行比较的谓词。
我想知道是否有一种方便的方法可以在不重复查询的情况下获取特定条件查询的行数。 (或者如果有一种简单的方法可以通过传入引用来获取条件查询的深层副本)
提前致谢!
这样做的"convenient way"是求助于本机SQL并使用window功能。您可以轻松地向顶层 SELECT
添加 window 函数,它简单地计算所有行,如下所示:
SELECT x, y, ..., COUNT(*) OVER()
FROM ...
通过使用 SQL 而不是 JPQL / Criteria API,您将可以使用其他各种非常有用的功能,例如上述功能。