2017-03-02 42 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

沒問題。很高興我能幫上忙 –