32

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

4

4 に答える 4

47

これを書いてください。

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

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

于 2012-04-18T04:45:17.403 に答える
18

エンティティ 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}> が得られます。

于 2013-03-21T14:35:06.657 に答える
5

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

見る、

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

于 2012-04-18T13:48:59.723 に答える