2017-03-02 64 views
0

我试图执行一个HQL查询,它将来自两个对象的数据组合起来:PersonPersonRoleAssociationHQL多表选择 - 外部加入?

我正在运行Hibernate 4.3.10和Grails 3.0.10。

我当前的查询看起来是这样的:

SELECT person 
    FROM Person person, 
     PersonRoleAssociation personRoleAssoc 
WHERE personRoleAssoc.person = person 

从我的理解,这是相当于一个标准SQL内左加入。这适用于大多数情况,但我也需要查询缺少PersonRoleAssociation的所有Persons,并且因为上述查询是左连接,所以我遇到了问题。

在标准SQL我只是使用左外连接,但我找不到任何等效HQL

如何在不改变我的对象结构的情况下执行HQL中外连接的等效操作?

+0

您是否将PersonRoleAssociation映射为Person实体中的OneToMany关系? –

+0

@MaciejKowalski不,我听说在Grails中有OneToMany关系可能会很慢,所以我试图避免它。 –

回答

2

如果你不能在Person端添加OneToMany并使用标准的左外连接,那么我认为你应该去正确的连接。类似于:

SELECT p 
    FROM PersonRoleAssociation personRoleAssoc 
    RIGHT OUTER JOIN personRoleAssoc.person p  
WHERE /* other criteria */ 
+0

太棒了,非常感谢! –

+0

没问题。很高兴我能帮上忙 –