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

JPA-JPQL query to fetch child entity field with all parent entity fields

我有以下要在 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 字段

如果我如下更改查询,它不会从数据库中获取 moveTaks 记录。

String newQuery="SELECT task.taskId,task.taskName,task.taskDesc,task.taskType FROM PickTask"

我想从数据库中获取所有记录,但上面的记录只获取 PickTask 类型。

在此感谢您的帮助。

你的设计有点低效。为什么不将另一个枚举字段放入 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'"

您的 JPQL 查询将非常简单:

  "SELECT T FROM Task T WHERE T.taskType != null"

我设法通过在 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 你的想法帮助我换位思考并解决这个问题。