Исключение QueryDSL: запрос задал выборку соединения, но владелец выбранной связи не присутствовал в списке выбора

#java #spring-data-jpa #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; }  

Поэтому мне нужно получить кучу запросов на проекты и связанных с ними проектов, а также получить доступ к статусу проекта. Это подводит меня к проблеме 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 JPAQuerylt;ProjectRequestgt;()  .from(projectRequest)  .leftJoin(projectRequest.project, project).fetchJoin()  .leftJoin(projectRequest.project.projectStatus, projectStatus).fetchJoin();