web-dev-qa-db-fra.com

Comment créer une requête JPA avec LEFT OUTER JOIN

Je commence à apprendre le JPA et j'ai mis en œuvre un exemple avec une requête JPA, basé sur le SQL natif suivant que j'ai testé dans SQL Server:

SELECT f.StudentID, f.Name, f.Age, f.Class1, f.Class2 
FROM Student f 
    LEFT OUTER JOIN ClassTbl s ON s.ClassID = f.Class1 OR s.ClassID = f.Class2
WHERE s.ClassName = 'abc'

A partir du SQL ci-dessus, j'ai construit la requête JPQL suivante:

SELECT f FROM Student f LEFT JOIN f.Class1 s;

Comme vous pouvez le voir, il me manque encore la condition OR s.ClassID = f.Class2 de ma requête d'origine. Ma question est, comment puis-je le mettre dans mon JPQL?

20
Bryan

Écrire cela;

 SELECT f from Student f LEFT JOIN f.classTbls s WHERE s.ClassName = 'abc'

Parce que votre entité Student a une relation un à plusieurs avec l'entité ClassTbl.

36

Si vous avez des entités A et B sans aucune relation entre elles et qu'il y a strictement 0 ou 1 B pour chaque A, vous pouvez faire:

select a, (select b from B b where b.joinProperty = a.joinProperty) from A a

Cela vous donnerait un objet [] {a, b} pour un seul résultat ou une liste <objet [] {a, b}> pour plusieurs résultats.

15
Xavier Dury

Normalement, la clause ON provient des colonnes de jointure du mappage, mais le projet JPA 2.1 permet des conditions supplémentaires dans une nouvelle clause ON.

Voir,

http://wiki.Eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON

3
James