작성
·
7.8K
7
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
18
안녕하세요^^
fetch join을 사용하는 이유는 엔티티 상태에서 엔티티 그래프를 참조하기 위해서 사용하는 것입니다. 따라서 당연히 엔티티가 아닌 DTO 상태로 조회하는 것은 불가능합니다.
이 경우 fetch join을 사용하지 마시고, 그냥 순수한 join을 사용하시면 원하는 결과를 얻을 수 있습니다^^
참고로 관련된 부분을 활용2편에서 DTO를 조회할 때 자세히 설명해드리니 참고해주세요 :)