我的课程Person
包含字段age
,课程Student
扩展Person
包含字段class
,而课程Teacher
扩展{{1}并且包含字段Person
。
我想让所有在X级的人,如果他们是学生,并且如果他们是老师,使用相同的jpql查询获得1500美元。查询必须返回Person列表。我可以进行两个查询并创建一个调用查询并加入结果的方法,但是有更好的解决方案。
我希望我能够解释
答案 0 :(得分:1)
使用“TYPE”和JPA 2.1“TREAT”来过滤课程。
"SELECT p from Person p where treat(p as Teacher).salary = 1500 or TYPE(p) = Student"
如果您不能使用JPA 2.1,您可以使用Teacher上的子查询返回salary = 1500的教师ID,并在主查询中使用结果。
"SELECT p from Person p where p.id in(SELECT t.id from Teacher t where t.salary=1500) or TYPE(p) = Student"