Lud*_*ume 6 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 Employee {
protected Float hourlyWage;
}
Run Code Online (Sandbox Code Playgroud)
我想查询具有某些子类条件的Employees,例如: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;
Run Code Online (Sandbox Code Playgroud)
我还尝试在Employee中放置一个抽象方法,并在查询中使用它,但也不工作.
请问你能帮帮我吗 ?
谢谢,
好的,我找到了解决方案.我不认为它是最好的,因为最终本机查询中的多次连接.但它正在发挥作用.
SELECT e
FROM Employee e, FullTimeEmployee f, PartTimeEmployee p
WHERE (e = f AND f.salary > 1000)
OR (e = p ...);
Run Code Online (Sandbox Code Playgroud)
编辑:
发现了另一个解决方案是一种LOT比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 ...)
Run Code Online (Sandbox Code Playgroud)
EDIT²:
似乎我不需要再加入最后一个版本的Hibernate(目前是4.3.10.Final).
SELECT e
FROM Employee e
WHERE e.salary IS NULL
OR e.salary > 1000
Run Code Online (Sandbox Code Playgroud)
应该管用