web-dev-qa-db-ja.com

LEFT OUTER JOINを使用してJPAクエリを作成する方法

私はJPAを学び始めており、SQL Serverでテストした次のネイティブSQLに基づいて、JPAクエリを使用した例を実装しています。

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に入れることができますか?

20
Bryan

これを書いてください。

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

Studentエンティティには、ClassTblエンティティと1対多の関係があるためです。

36

エンティティAとBの間に関係がなく、各Aに厳密に0または1 Bがある場合、次のようにできます。

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

これにより、単一の結果に対してObject [] {a、b}が得られ、複数の結果に対してList <Object [] {a、b}>が得られます。

15
Xavier Dury

通常、ON句はマッピングの結合列から取得されますが、JPA 2.1ドラフトでは、新しいON句に追加条件を追加できます。

見る、

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

3
James