我有Person
包含字段的类,包含字段age
的类Student
扩展,以及包含字段的类扩展。Person
class
Teacher
Person
salary
我想使用相同的 jpql 查询获取所有在 X 班的人,如果他们是学生,如果他们是老师,则赚取 1500 美元。查询必须返回人员列表。我可以进行两个查询并创建一个调用查询和加入结果的方法,但是有更好的解决方案。
我希望我能够解释
我有Person
包含字段的类,包含字段age
的类Student
扩展,以及包含字段的类扩展。Person
class
Teacher
Person
salary
我想使用相同的 jpql 查询获取所有在 X 班的人,如果他们是学生,如果他们是老师,则赚取 1500 美元。查询必须返回人员列表。我可以进行两个查询并创建一个调用查询和加入结果的方法,但是有更好的解决方案。
我希望我能够解释
使用“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 上使用子查询返回薪水 = 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"