Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA-JPQL查询以获取包含所有父实体字段的子实体字段_Jpa_Jpql - Fatal编程技术网

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

JPA-JPQL查询以获取包含所有父实体字段的子实体字段,jpa,jpql,Jpa,Jpql,我需要在JPQL中实现以下要求,但无法实现。请帮帮我 我有父实体Task和两个子实体MoveTask和PickTask 这些看起来像下面 @Entity class Task{ String taskId; String taskName; String taskDesc; } class MoveTask extends Task{ String moveType; } class PickTask extends Task{ String tas

我需要在
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字段

如果我按以下方式更改查询,则它不会从数据库中获取moveTaks记录

String newQuery="SELECT task.taskId,task.taskName,task.taskDesc,task.taskType FROM PickTask"
我想从数据库中获取所有记录,但上面的记录仅获取
PickTask
Type


感谢您的帮助。

您的设计效率有点低。为什么不将另一个枚举字段置于任务中,而不是再创建两个实体?那么您的实体将如下所示:

@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您的想法帮助我以不同的方式思考并解决此问题。

很抱歉,我无法更改标准实体任务。我只能对MoveTask实体进行更改。如果是这种情况,您可以尝试使用JOIN query。但我不推荐这样的设计,以后很难扩展和测试。我遇到了一个错误,因为变量taskType未在任务实体中定义。错误是状态字段路径“Task.taskType”无法解析为有效类型该错误与Jpql中的区分大小写相关。您的实体不会持久化到任何数据库?您好,您是如何测试您的jpql查询的?如果您使用NetBeans,我建议您尝试消除所有可能的变量,并尝试测试类似的内容