HQL相当于LEFT JOIN中的附加条件

时间:2014-07-04 19:21:23

标签: sql hibernate join hql

我有hibernate实体:

  • 组织(有2个ManyToMany人员映射(普通人员名单和特权人员名单))

有没有办法让HQL与此查询等效?

    select distinct p.id, p.lastAndFirstName
    from organizations o
    left join organization2person op on op.organization_id=o.id
    left join organization2privileged_person opp on opp.organization_id=o.id
    left join sys_persons p on p.id=op.person_id or p.id=opp.person_id
    order by p.lastAndFirstName

我不知道如何在最后一次左连接中创建条件p.id=op.person_id or p.id=opp.person_id。 我看过WITH个关键字,但它创建条件为" AND",而不是" OR"。

1 个答案:

答案 0 :(得分:1)

它可能看起来像这样。

基于非常少的细节,听起来你想要子查询。但是您可以考虑从Person端反向映射这些关联。它可能效率不高,但可能会让您的生活更轻松。

select p.id, p.lastAndFirstName from Person p
   where p.id in
   (select p2.id from Organization o 
        left join op.persons p2)
   or p.id in
   (select p3.id 
       left join o.privilegedPersons p3)

(PS。我无法弄清楚你想用sys_persons做什么)