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っぽい。