2017-03-02 5 views
0

Ich versuche, eine HQL Abfrage durchzuführen, die Daten von zwei Objekten kombiniert: Person und PersonRoleAssociation.HQL Multi Table Select - Äußere Verbindung?

Ich bin Hibernate 4.3.10 laufen, und Grails 3.0.10.

Meine aktuelle Abfrage sieht wie folgt aus:

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

Von meinem Verständnis ist dies gleichbedeutend mit einer Standard SQL inneren LEFT JOIN. Dies funktioniert in den meisten Fällen, aber ich muss auch für alle Persons Abfrage, die eine PersonRoleAssociation fehlt, und da die obige Abfrage eine linke Verknüpfung ist, laufe ich auf Probleme.

In Standard SQL würde ich einfach eine linke äußere Verbindung verwenden, jedoch kann ich keine Entsprechung für HQL finden.

Wie würde ich das Äquivalent einer äußeren Verbindung in HQL ausführen, ohne die Struktur meiner Objekte zu ändern?

+0

Haben Sie PersonRoleAssociation als OneToMany-Beziehung in der Entität Person zugeordnet? –

+0

@MaciejKowalski Nein, ich habe gehört, dass OneToMany-Beziehungen in Grails ziemlich langsam sein können, also habe ich versucht, es zu vermeiden. –

Antwort

2

Wenn Sie nicht ein OneToMany auf der Seite Person hinzufügen können und den Standard linken äußeren Join verwenden, dann denke ich, dass Sie für einen rechten Join gehen sollten. Etwas wie:

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

Super, vielen Dank! –

+0

Kein Problem. Froh, dass ich helfen konnte –