JPQLでスター型のクエリができない
ここで言うスター型のクエリとは、
- EmployeeエンティティとProjectエンティティの関連が1対多、
- EmployeeエンティティとPhoneエンティティの関連が1対多、
- ProjectエンティティとPhoneエンティティのプロパティを条件にしてEmployeeエンティティを取得
といったタイプのクエリです。
試してみたところ、うーむ、確かにJOINキーワードでこれらの3つのエンティティを素直に結合できない。
でも、無理やりやるとこんな感じ?
JPQL
SELECT DISTINCT e1 FROM Employee e1 JOIN e1.projects p1, Employee e2 JOIN e2.phones p2 WHERE e1 = e2 AND p1.name = 'QA' AND p2.type = 'Cell'
生成されるSQLは次のとおり。
SQL
select distinct employee0_.id as id4_, employee0_.name as name4_, employee0_.salary as salary4_, employee0_.manager_id as manager7_4_, employee0_.department_id as department6_4_, employee0_.address_id as address5_4_, employee0_.version as version4_ from Employee employee0_ inner join Employee_Project projects1_ on employee0_.id=projects1_.employees_id inner join Project project2_ on projects1_.projects_id=project2_.id, Employee employee3_ inner join Phone phones4_ on employee3_.id=phones4_.employee_id where employee0_.id=employee3_.id and project2_.name='QA' and phones4_.type='Cell'
Employeeが2度結合されちゃいますけど、求める結果セットはOKっぽい。