私は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に入れることができますか?
これを書いてください。
SELECT f from Student f LEFT JOIN f.classTbls s WHERE s.ClassName = 'abc'
Studentエンティティには、ClassTblエンティティと1対多の関係があるためです。
エンティティ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}>が得られます。
通常、ON句はマッピングの結合列から取得されますが、JPA 2.1ドラフトでは、新しいON句に追加条件を追加できます。
見る、
http://wiki.Eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON