JPA-JPQL查询以获取具有所有父实体字段的子实体字段

时间:2017-01-09 03:34:24

标签: jpa jpql

我要求在JPQL中实施,但无法做到这一点。请帮帮我。

我有父实体Task和两个子实体MoveTaskPickTask

这些如下所示。

@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类型。

在此感谢您的帮助。

3 个答案:

答案 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,你的想法可以让我有所不同地思考并解决这个问题。