해결된 질문
작성
·
426
2
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세여 영한님 강의 너무 잘 보고있습니다.
다름이 아니라 JPA 관련 강의를 모두 듣고 사이드 프로젝트에JPA를 적용하던 중에 문제가 발생하여 질문드립니다.
현재 Issue 라는 엔티티가 member와 milestone이라는 엔티티와 @ManyToOne 관계를 맺고 있는 와중에 Issue의 상태에 따라 Issue를 조회 하는 로직을 만들고 있었습니다.
@Query(value = "select i from Issue i left join fetch i.member m left join fetch i.milestone mi where i.status = :status")
Page<Issue> findIssues(Pageable pageable, @Param("status") IssueStatus status);
위에 코드가 상태에 따라 Issue를 조회 하는 코드인데, 우선 N+1 문제를 해결하기 위해 left join fetch 를 사용하고 Issue의 상태에 따른 조회를 위해 where 문을 사용하였습니다. 작성한 코드가 크게 문제가 있다 생각하지 않았는데 막상 실행을 해보니 query specified join fetching, but the owner of the fetched association was not present in the select list
라는 문구의 예외가 발생하였습니다.
해당 글을 보고 따로 count query를 작성하여 해결을 하긴 했는데, 왜 여기서 따로 count query를 작성해야 하는지 의문이 들었습니다. 페이징을 하면 count query를 알아서 날려주는 것으로 생각했는데 여기서는 왜 그렇게 동작하지 않는걸까요??
@Query(value = "select i from Issue i left join fetch i.member m left join fetch i.milestone mi where i.status = :status",
countQuery = "select count(i) from Issue i left join i.member left join i.milestone where i.status = :status")
Page<Issue> findIssues(Pageable pageable, @Param("status") IssueStatus status);
답변 1
3
답변 정말 감사드립니다. 제가 좀더 찾아보고 질문들 남겼어야 했는데 죄송합니다.