1

给定以下 SQL 结构MY_TABLE

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

我的任务是让这些东西按 s 分组GROUP_LABEL,同时忘记TOPIC文件的不同 s。所以我的预期结果是

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 查询?在https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/querycriteria的 9.3.1 中,我不知道将我的内部查询放入 Criteria 查询的 from 构造中。 html似乎这是不可能的。

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

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

4

3 回答 3

1

尝试这个,

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

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

于 2017-08-14T11:08:50.363 回答
0

首先你的sql查询可以恢复到这个:

Select distinct GLOBAL_LABEL ,count (distinct FILE) from MY_TABLE group by GLOBAL_LABEL

其次,最好不要用主要名称命名列以避免出现问题。

最后,您可以将其用作您的 HQL 查询(没有魔法):

Select distinct ge.globalLabel,count (distinct ge.file) from GlobalEntity ge group by ge.globalLabel
于 2017-08-07T15:22:06.263 回答
0

是的,可以通过使用JPA javax.persistence.criteria API来实现。

看看官方文档中的这个例子

于 2017-08-07T15:02:05.467 回答