2012-04-18 80 views
16

我开始学习JPA,并已经实现了与JPA查询为例,根据我在SQL Server中测试了以下本地SQL:如何创建带有LEFT OUTER一个JPA查询JOIN

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?

+0

可能的重复[如何使用LEFT OUTER JOIN进行JPA查询](http://stackoverflow.com/questions/4750371/how-to-make-a-jpa-query-with-left-outer-join ) – Perception 2012-04-18 03:45:58

回答

27

写下这个;

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

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

10

如果你有实体A和B,它们之间没有关系,有严格的0或1和,B中每一个A,你可以这样做:

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

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

+0

这是唯一可以与不相关实体一起使用的答案 – 11thdimension 2017-11-22 07:11:27