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,我建议您尝试消除所有可能的变量,并尝试测试类似的内容