我要求在JPQL
中实施,但无法做到这一点。请帮帮我。
我有父实体Task
和两个子实体MoveTask
和PickTask
。
这些如下所示。
@Entity
class Task{
String taskId;
String taskName;
String taskDesc;
}
class MoveTask extends Task{
String moveType;
}
class PickTask extends Task{
String taskType;
}
现有的JPQL
查询:
String Query="SELECT task.taskId,task.taskName,task.taskDesc FROM TASK";
根据我的新要求,我需要获取PickTask
中的 taskType 字段。
如果我更改下面的查询,则不会从db。
获取moveTaks记录String newQuery="SELECT task.taskId,task.taskName,task.taskDesc,task.taskType FROM PickTask"
我想从db获取所有记录,但上面只提取PickTask
类型。
在此感谢您的帮助。
答案 0 :(得分:0)
您的设计效率低下。为什么不将另一个枚举字段放到Task而不是再制作2个实体?然后你的实体就像:
@Entity
class Task{
String taskId;
String taskName;
String taskDesc;
@Enumerated(EnumType.STRING)
TaskType taskType;
}
您的JPQL查询非常简单:
"SELECT T FROM TASK T WHERE T.taskType = 'PICK'"
答案 1 :(得分:0)
您的JPQL查询非常简单:
"SELECT T FROM Task T WHERE T.taskType != null"
答案 2 :(得分:0)
我设法通过在JPQL中使用LEFT JOIN解决了这个问题。
查询如下。
SELECT task.taskId,task.taskName,task.taskDesc,pickTask.taskType FROM Task task LEFT JOIN PickTask pickTask on (task.taskId=pickTask.taskId);**
谢谢你@fangdi,你的想法可以让我有所不同地思考并解决这个问题。