Spring Data JPA를 사용하여 fetch join + paging을 시도하던 도중 다음과 같은 에러를 만났다.
Caused by: org.hibernate.QueryException: query specified join fetching,
but the owner of the fetched association was not present in the select list
현재 Comment와 Member 테이블 (N:1)이 존재하고, Comment List 조회 시 Member(작성자) fetch join + paging을 시도한 상황이다.
Hibernate에서 fetch join 사용 시, paging에 필요한 Count 쿼리를 자동으로 만들어주지 못한다고 한다.
따라서 다음과 같이 Count Query를 명시해주어야 한다. (@Query 애노테이션에서 편리하게 작성 가능하다)
댓글 리스트 20개가 존재하고, 이 댓글 리스트 작성자(member)는 모두 5명이다. 따라서 (1 + 5) 총 6개의 쿼리가 나가야 한다.
하지만 fetch join이 정상적으로 수행되어 1(comment) + 1(count query) 총 2개의 쿼리로 요청을 처리했고, paging도 정상적으로 수행되었다.