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

时间:2012-04-18 03:40:59

标签: 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'

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

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

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

3 个答案:

答案 0 :(得分:33)

写这个;

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

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

答案 1 :(得分:13)

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

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

这会为您提供单个结果的对象[] {a,b}或列表< Object [] {a,b}>多个结果。

答案 2 :(得分:3)

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

请参阅,

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