Inheritance 抽象类的JPA查询&x2B;子类字段条件

Inheritance 抽象类的JPA查询&x2B;子类字段条件,inheritance,jpa,abstract,Inheritance,Jpa,Abstract,我有一个这样的持久性模型: @Entity public abstract class Employee { @Id protected Integer employeeId; ... } @Entity public class FullTimeEmployee extends Employee { protected Integer salary; ... } @Entity public class PartTimeEmployee extends

我有一个这样的持久性模型:

@Entity
public abstract class Employee {
    @Id
    protected Integer employeeId;
    ...
}
@Entity
public class FullTimeEmployee extends Employee {
    protected Integer salary;
    ...
}
@Entity
public class PartTimeEmployee extends Employee {
    protected Float hourlyWage;
}
我想查询具有somes children类条件的员工,例如:salary>1000

我试过了,但没用

SELECT e
FROM Employee e
WHERE e.salary > 1000;

SELECT e
FROM Employee e
WHERE (TYPE(e) = FullTimeEmployee AND e.salary > 1000)
OR TYPE(e) = PartTimeEmployee;
我还尝试在Employee中放置一个抽象方法,并在查询中使用它,但也不起作用

你能帮我吗


谢谢,

好的,我找到了解决办法。我不认为这是最好的,因为在最终的本机查询中有多个连接。但它正在发挥作用

SELECT e
FROM Employee e, FullTimeEmployee f, PartTimeEmployee p
WHERE (e = f AND f.salary > 1000)
OR (e = p ...);
编辑:

找到了另一个解决方案,该解决方案的速度比上面的解决方案快(200k行)。在where子句中使用嵌套选择:

SELECT e
FROM Employee e
WHERE e.employeeId IN (SELECT f.employeeId FROM FullTimeEmployee f WHERE f.salary > 1000)
OR e.employeeId IN (SELECT p.employeeId FROM PartTimeEmployee p WHERE ...)
编辑²:

看来我不需要再加入Hibernate的最新版本(目前是4.3.10.Final)


应该能起作用

很好的解决方案。第二个在我的例子中特别有用,我已经编写了两个独立的查询,但必须将它们组合成一个查询。
SELECT e
FROM Employee e
WHERE e.salary IS NULL
OR e.salary > 1000