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?
É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.
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.
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