我想提出要求
SELECT count(alumni.id),
undergrad_school.NAME
FROM undergrad_school
INNER JOIN alumni
ON alumni.undergrad_school_id = undergrad_school.id
GROUP BY undergrad_school_id;
但是使用Jpa条件查询(使用Spring引导),我试图做类似的事情:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Object[]> criteria = builder.createQuery(Object[].class);
Root<Alumni> alumniRoot = criteria.from(Alumni.class);
Root<UndergradSchool> schoolRoot = criteria.from(UndergradSchool.class);
criteria.groupBy(schoolRoot.get("id"));
criteria.multiselect(schoolRoot.get("name"), builder.count(alumniRoot)).distinct(true);
查询使用交叉连接生成:
SELECT DISTINCT undergrads1_.NAME AS col_0_0_,
Count(alumni0_.id) AS col_1_0_
FROM alumni alumni0_
CROSS JOIN undergrad_school undergrads1_
GROUP BY undergrads1_.id
```
So my question is, how can i do the first request with Criteria query.
The final goal is to count the number of alumni by undergrad school.
Thank you
Join<UndergradSchool> schoolRoot = alumniRoot.join(alumniRoot.get("undergradSchool"));