内部联接而不是交叉联接JPA标准查询

问题描述 投票:0回答:1

我想提出要求

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
spring spring-boot jpa hibernate-criteria criteria-api
1个回答
0
投票
Join<UndergradSchool> schoolRoot = alumniRoot.join(alumniRoot.get("undergradSchool"));
© www.soinside.com 2019 - 2024. All rights reserved.