java - JPA Criteria 通过子查询查询 GROUP 和 COUNT

标签 java spring hibernate jpa jpa-criteria

给定 MY_TABLE 的以下 SQL 结构:

GROUP_LABEL | FILE  | TOPIC
-----------------------------
group A     | 1.pdf | topic A
group A     | 1.pdf | topic B
group A     | 2.pdf | topic A
group B     | 2.pdf | topic B

我的任务是按GROUP_LABEL对这些内容进行分组,同时忘记文件的不同TOPIC。所以我的预期结果是

GROUP_LABEL | COUNT(*) 
----------------------
group A     | 2       -- two different files 1.pdf and 2.pdf here
group B     | 1       -- only one file here

在纯 SQL 中我会这样做

SELECT GROUP_LABEL, COUNT(*) FROM (
    SELECT DISTINCT GROUP_LABEL, FILE FROM MY_TABLE
);

是否可以将其转换为 JPA Criteria API 查询?我不知道将我的内部查询放入 Criteria 查询的 from 构造中,在 https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/querycriteria.html 的 9.3.1 中看来这是不可能的。

但我简直不敢相信;-) 以前有人这样做过吗?内部查询将通过各种经过充分测试的过滤谓词来丰富,我希望重用这些谓词。

我使用的 spring-boot-starter-data : 1.5.6.RELEASE 主要是标准配置。

最佳答案

试试这个,

查询:select label, count(distinct file) from tableName group by label;

标准:criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("label")).add(Projections.countDistinct("file")));

关于java - JPA Criteria 通过子查询查询 GROUP 和 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45549781/

相关文章:

java - Hibernate 存储过程 - 未知支持 REF_CURSOR 参数

java - 读取 servlet 中由用户输入的文本文件

java - 如何在连接 JPA/Ebean 上定义多个条件

java - 正则表达式中的嵌套括号

java - 缺少 CrudRepository#findOne 方法

java - 从 jsp 中的 ModelAndView 检索模型

java - 在 Spring 查询中从当前日期减去 6 个月

java - Hibernate Date Criteria 失败,但 HQL 有效

java - 在 Hibernate 中执行 Criteria 查询后是否需要提交/关闭 session ?

java - Spring 验证注释 - 如何验证字符串中的 2 个字符条目是否是实际的美国州?