java - QueryDSL 异常:查询指定连接提取,但提取关联的所有者不存在于选择列表中
问题描述
我很难理解为什么会遇到 QueryException
query specified join fetching, but the owner of the fetched association was not present in the select list
在我的项目中,我需要执行以下操作:
projectRequest.getName();
...... a bunch of different projectRequest gets...
projectRequest.getProject().getName()
...... a bunch of project gets....
projectRequest.getProject().getProjectStatus().getName();
这是实体的样子:
public class ProjectRequest {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ProjectId", referencedColumnName = "ProjectId", insertable = false, updatable = false)
private Project project;
}
public class Project {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "StatusId", insertable = false, updatable = false)
private ProjectStatus projectStatus;
}
所以我需要获取一堆 ProjectRequests 及其关联的项目,并且还需要访问项目的状态。这将我引向 N+1 问题。我正在阅读一个解决方案是获取加入延迟获取的资源,所以这就是我所做的:
select projectRequest
from com.api.integration.entities.ProjectRequest projectRequest
left join fetch projectRequest.project as project
left join fetch projectRequest.project.projectStatus as projectStatus
但是在添加left join fetch projectRequest.project.projectStatus as projectStatus
部分后,我遇到了 query specified join fetching, but the owner of the fetched association was not present in the select list
. 我该如何解决这个问题?为什么会这样?
这是我在 api 中的查询:
new JPAQuery<ProjectRequest>()
.from(projectRequest)
.leftJoin(projectRequest.project, project).fetchJoin()
.leftJoin(projectRequest.project.projectStatus, projectStatus).fetchJoin();
解决方案
推荐阅读
- python - 根据值的四分位数范围在新列中分配标签
- python - Pandas Dataframe - 在字符串中查找字符串的出现
- typescript - Vuex + Typescript:突变对象有效载荷始终未定义
- r - 在R中的data.frames列表中使用一个data.frame的指定列
- c# - Azure Active Directory Login Getting Claims 希望从本地数据库添加更多声明
- spring - jConsole 在使用 micrometer-registry-jmx 和 GuavaCacheMetrics 时不断断开连接,Spring 2.3 升级
- python - 我无法安装scrapy
- sockets - 在本地测试 UDP 广播
- php - 将 XML 解析为值可能不存在的表
- python - 有没有办法从python中的字符串中找到关键字