2017-06-27 8 views
0

Ich habe zwei Klassen. Zur Vereinfachung habe ich nicht verwandte Daten entfernt. Ich muss bei Order to Survey nicht umgekehrt sein. Ich weiß, dass ich select * from Order o right join order.survey s where s.id='x' ausführen kann, aber es ist nicht das, was ich gerne tun würde. Ich möchte mit linkem äußerem Join bei Order to Survey teilnehmen, aber die Umfrage enthält keine Instanz der Order-Klasse in der Klasse. Der Auftrag enthält eine Instanz der Vermessungsklasse. Daher ist es einfacher, Tabellen aus der Auftragsklasse zu verknüpfen. Ich habe es mit SQL in Grails gemacht, aber ich frage mich, wie es mit hql getan werden kann. Der SQL-Code ist wie folgt.Grails beitreten Tabellen

Select survey.*,ao.* from survey sr left outer join order ao on ao.survey_id=sr.id 

Modelle sind wie folgt

class Order{ 
Survey survey 
} 

class Survey { 
} 

Antwort

0

Versuchen Sie folgendes:

SELECT sr, (SELECT ao FROM namespace.Order ao WHERE ao.survey = sr.id) 
FROM namespace.Survey sr 

Sie listen alle Objekte Inspektion und falls vorhanden ein zugehöriges Sortieren Sie von subquery

bekommen Passen Sie auf: Ich habe Namespace-Begriff hinzufügen, Sie werden Witz ändern h Ihre Namespace-Klasse

+0

in diesem Fall, dass Sie einige Daten sind der Auswahl von ao. In meinem Fall muss ich nach einigen Werten in ORDER filtern, deshalb muss ich Tabellen verbinden und verwenden. –

0

Um Joins in HQL durchzuführen, müssen Sie Ihr Domänenmodell erweitern. Fügen Sie einen Back-ref zu Ihrer Survey Klasse:

class Survey { 
    static belongsTo = [ order:Order ] 
} 

so können Sie die Order Instanz von ihm lösen:

Survey s = Survey.get someId 
s.order 

oder

def orders = Survey.executeQuery 'select order from Survey where order.id = 111' 
+0

In Ihrem Vorschlag muss ich Reihenfolge zu Umfrage hinzufügen. Es funktioniert jedoch nicht für mich. Es sollte keine Auftrags-ID in der Umfrage geben. Wenn ich hinzufüge gehört dann wird es Orderid Spalte zu Survey in der Datenbank hinzufügen. Wenn Sie jedoch "hasone" zur Bestellung vorschlagen, könnte es besser sein. In diesem Fall muss ich allerdings in Survey notNullable eine Bestellinstanz anlegen, und auch für mich funktioniert es nicht. Danke trotzdem –