HQL implizite Join in where-Klausel generiert Cross-Join statt inneren Join

8

Ich verwende Hibernate 3.6 und MSSQL 2012.

Beim Ausführen dieser HQL

%Vor%

Ich bekomme dieses SQL

%Vor%

* Beachten Sie die cross-Verknüpfung und die hinzugefügte Bedingung in der where-Klausel.

Laut Hibernate-Dokumentation Ссылка

Impliziter Join sollte zu innerer Join generiert werden.

Ich habe bemerkt, dass es einen offenen Fehler Ссылка gibt, der sich auf dieses Problem bezieht, aber niemand beantwortet und es ist schon seit einem Jahr geöffnet.

Ich würde mich über Informationen zu diesem Thema freuen. Danke.

PS. Ich bin mir bewusst, dass die Verwendung von impliziten Joins nicht der richtige Weg ist, HQL zu schreiben, aber ich kann momentan nichts dagegen tun.

    
Rotem 27.11.2013, 11:15
quelle

2 Antworten

9

Ihr Join ist ein innerer Join, verwendet aber die alte Syntax, die darin besteht, eine Bedingung in die where-Klausel einzufügen:

%Vor%

anstatt es mit

zu tun %Vor%

Das Ergebnis ist genau das gleiche.

Und implizite Joins in HQL sind überhaupt kein Problem, solange Sie verstehen, was sie tun.

    
JB Nizet 28.11.2013, 06:43
quelle
0

Wenn Sie HQL verwenden, verwenden Sie beim Ausführen von Join-Operationen immer richtige Aliase. Ihre Abfrage sollte etwa so aussehen:

%Vor%

Andernfalls, wenn Sie versuchen, tbl.entity.someProperty zu verwenden, wird in HQL immer ein crossJoin

erstellt     
Rajdeep 20.11.2015 10:41
quelle

Tags und Links