2014-09-15 10 views
7

Wenn ich versuche, eine Abfrage wie folgt auszuführen:Wie verlassen Sie nicht verbundene Einheiten?

QA A = QA.a; 
QB B = QB.b; 
... 
from(A) 
.leftJoin(B).with(B.name.eq(A.nameSomething)); 

(A und B Einheiten sind nicht verwandt) bin immer ich immer diese Fehlermeldung:

Caused by: org.hibernate.hql.ast.QuerySyntaxException: Path expected for join! 

Ich möchte in der Lage sein, nach links treten nicht verwandte Entitäten unter Verwendung von Querydsl. Ist das überhaupt möglich? Oder ist die einzige Möglichkeit, eine native Oracle-Abfrage zu schreiben?

Antwort

1

Angenommen, Sie beziehen sich auf JPA-Kriterien. innerJoin, leftOuterJoin dienen zum Verknüpfen von Beziehungen, da dies die einzige logische Sache ist, an der Sie in einem O-O-System teilnehmen würden.

Wenn Sie stattdessen die Gleichheit von entity.field mit entity2.field vergleichen möchten (wo kein FK in der Datenbank existiert und keine Beziehung in den Klassen existiert), dann tun Sie das in der WHERE-Klausel, genau wie bei jedem Filter.

Offensichtlich QueryDSL hat seine eigene Syntax/Regeln so zu, dass, wenn unter Bezugnahme dann ist diese JPA nicht

5

unabhängige Einheiten Beitritt ist nicht möglich, mit Querydsl JPA. Querydsl JPA verwendet intern JPQL und erbt diese Einschränkung.

+0

also, damit Entitäten Joinable sein können, muss es eine Beziehung sowohl in den Java-Modellen als auch in der Datenbank geben, oder? Wenn dies der Fall ist, bedeutet dies, dass ich, wenn ich nach vorhandenen Einträgen in einer n: m Join-Tabelle suchen muss, die Einträge der Join-Tabelle in Java modellieren und diese Objekte mit der 'n'-Seite der Modell. Richtig? – sorrymissjackson

+2

ja, das ist richtig. alternativ können Sie mehrere Quellen verwenden und die Join-Bedingungen im where-Teil beschreiben. –

+0

Das nenne ich dumm! das tut mir leid ! – Adelin

Verwandte Themen