2014-09-15 13 views
7

Quando provo a eseguire una query come questa:Come lasciare unire entità non correlate?

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

(entità A e B non sono correlati) io sono sempre questo errore:

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

vorrei essere in grado a sinistra unire entità non collegate usando querydsl. È possibile a tutti? Oppure l'unico modo è scrivere una query Oracle nativa?

risposta

1

Supponendo che ti riferisci ai criteri JPA. innerJoin, leftOuterJoin servono per unire le relazioni, poiché questa è l'unica cosa logica a cui ci si unirebbe in un sistema O-O.

Se invece si desidera confrontare l'uguaglianza di entity.field con entity2.field (in cui nessun FK esiste nel database e nessuna relazione esiste nelle classi), eseguire tale operazione nella clausola WHERE, proprio come qualsiasi filtro.

Ovviamente QueryDSL ha la sua sintassi propria/regole in modo se riferiti a che allora questo non è JPA

5

Unire entità non collegati non è possibile con Querydsl JPA. Querydsl JPA utilizza internamente JPQL ed eredita questa restrizione.

+0

quindi, per le entità che devono essere unificate, deve esserci una relazione sia nei modelli Java che nel database, giusto? Se è così, questo significa che se devo controllare le voci esistenti in una tabella di join n: m, dovrei modellare le voci della tabella di join in Java e associare quegli oggetti con il lato 'n' del modello. Corretta? – sorrymissjackson

+2

sì, è corretto. in alternativa è possibile utilizzare più fonti e descrivere le condizioni di join nella parte Where. –

+0

Ora questo è quello che chiamo stupido !!! perdonami per quello ! – Adelin

Problemi correlati