JPA
[JPA] Fetch Join과 Paging 동시 사용 충돌
어떻게말이름이히힝
2025. 1. 3. 21:57
페이징을 하기 위해선 전체 카운트가 있어야한다.
그래야 아래 사진처럼 몇페이지까지 있는지 페이징 메타 데이터 제공이 가능하다.
여기서 왜 문제가 생기냐면
보통 JPA는 무조건 countQuery를 하게 되는데 JPA가 이 FETCH JOIN이 담긴 쿼리를 기반으로 countQuery를 지멋대로 작성해버린다. 그렇기 때문에 아래 코드와 같이 countQuery를 명시적으로 작성해주게 되면 이 오류가 풀리게 된다.
@Query(value = "SELECT t FROM Todo t JOIN FETCH t.user u ORDER BY t.modifiedAt DESC"
,countQuery = "SELECT COUNT(t) FROM Todo t")
Page<Todo> findAllByOrderByModifiedAtDesc(Pageable pageable);