如何使用LEFT OUTER JOIN创建JPA查询

Bry*_*yan 22 java jpa jpql

我开始学习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'
Run Code Online (Sandbox Code Playgroud)

从上面的SQL我构建了以下JPQL查询:

SELECT f FROM Student f LEFT JOIN f.Class1 s;
Run Code Online (Sandbox Code Playgroud)

如您所见,我仍然缺少OR s.ClassID = f.Class2原始查询的条件.我的问题是,我怎样才能把它放到我的JPQL中?

Sai*_*Aye 39

写这个;

 SELECT f from Student f LEFT JOIN f.classTbls s WHERE s.ClassName = 'abc'
Run Code Online (Sandbox Code Playgroud)

因为您的Student实体与ClassTbl实体具有一对多关系.


Xav*_*ury 16

如果你有实体A和B没有任何关系,并且每个A严格为0或1 B,你可以这样做:

select a, (select b from B b where b.joinProperty = a.joinProperty) from A a
Run Code Online (Sandbox Code Playgroud)

这将为单个结果提供Object [] {a,b}或为多个结果提供List <Object [] {a,b}>.


Jam*_*mes 5

通常 ON 子句来自映射的连接列,但 JPA 2.1 草案允许在新的 ON 子句中使用附加条件。

看,

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