• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@QueryProjection과 fetch join

20.02.07 14:19 작성 조회수 7.08k

6

List<ProjectionResult> fetch = queryFactory
.select(new QProjectionResult(classA.id,
classA.relStatus.stringValue(),
classA.relResult.stringValue(),
classA.name,
))
.from(classA)
.join(classA.classB, classB).fetchJoin()
.join(classB.classC, classC).fetchJoin()

안녕하세요. 

위와 같이 join fecth와 queryprojection을 같이 사용하는 예제에서 실행하면 

Caused by: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,

와 같은 예외를 발생시킵니다. 

select(new QProjectionResult)가 아닌 select(classA)를 하면 정상적으로 결과가 처리되는데

어떤 차이가 있고 어떻게 해결을 해야 할까요 ?

감사합니다. 

답변 1

답변을 작성해보세요.

17

안녕하세요^^

fetch join을 사용하는 이유는 엔티티 상태에서 엔티티 그래프를 참조하기 위해서 사용하는 것입니다. 따라서 당연히 엔티티가 아닌 DTO 상태로 조회하는 것은 불가능합니다.

이 경우 fetch join을 사용하지 마시고, 그냥 순수한 join을 사용하시면 원하는 결과를 얻을 수 있습니다^^

참고로 관련된 부분을 활용2편에서 DTO를 조회할 때 자세히 설명해드리니 참고해주세요 :)