Как создать запрос JPA с LEFT OUTER JOIN

Я начинаю изучать JPA и реализовал пример с запросом JPA на основе следующего собственного SQL-кода, который я тестировал в 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'

Из приведенного выше SQL я построил следующий запрос JPQL:

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

Как вы можете видеть, мне по-прежнему не хватает условия OR s.ClassID = f.Class2 из моего исходного запроса. Мой вопрос: как я могу поместить его в свой JPQL?

Ответы

Ответ 1

Запишите это;

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

Поскольку ваш объект-ученик имеет отношения "Один-многим" с сущностью ClassTbl.

Ответ 2

Если у вас есть сущности A и B без какой-либо связи между ними, и для каждого A существует строго 0 или 1 B, вы можете сделать:

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

Это даст вам объект [] {a, b} для одного результата или List < Object [] {a, b} > для нескольких результатов.