2

次のドメイン モデルがあります。

class Department {
    Contact primaryContact
    Company company
}

JPQLクエリを実行しているとき

from Department e 
left join e.primaryContact 
where (e.company.id=?) order by e.name asc

次のSQLを取得します。

select *aliases* 
     left outer join contact contact1_ 
     on department0_.contact_id=contact1_.ID 
where 
      department0_.company_id=? 
order by department0_.name desc

しかし、私が実行しようとしているとき

from Department e 
left join e.primaryContact 
where (e.insuranceCompany.id=?) 
order by e.primaryContact.name asc

私は得る:

select *aliases* 
  from department department0_ 
       left outer join contact contact1_ on 
       department0_.primary_contact_id = contact1_.ID 
       cross join contact contact2_ 
 where 
         department0_.primary_contact_id = contact2_.ID 
    and department0_.company_id = ? order by contact2_.name desc

違いは

cross join contact contact2_ where department0_.primary_contact_id=contact2_.ID

したがって、ソートするときは常に内部結合がありますprimaryContact.name

この状況で左結合を実行するにはどうすればよいですか? (私は休止状態 3.6.10 を使用しています)

前もって感謝します。

4

1 に答える 1

1

連鎖式は常に内部結合になります。左の結合エンティティにエイリアスを割り当て、エイリアスを使用します。

from Department e 
left join e.primaryContact contact
where (e.insuranceCompany.id=?) 
order by contact.name asc
于 2012-11-23T14:09:46.113 に答える