JPQL
JPQL 로 Pageable 객체 사용 시 주의할 점
개요 Spring Data JPA Repository 에 Pageable 객체를 파라미터로 전달하면 별도의 쿼리를 작성하지 않아도 페이징을 위한 쿼리를 만들어준다. 전통적인 오프셋 기반의 페이징 처리를 할때는 전체 데이터 수가 알아야하기에 Spring Data JPA 에서는 Page 객체를 반환하는 방식을 주로 이용한다. 이때, 전체 데이터 수를 알아야하므로 페이징 쿼리 외에도 추가적으로 count 쿼리가 나간다. 이 과정에서 JPQL 을 사용하여 페이징 쿼리를 작성할 때, 주의할 점이 있어 공유하고자 글을 작성한다. 주의할 점 결론부터 이야기하자면 count 쿼리가 @Query 로 작성한 JPQL 을 기반으로 나간다는 것을 인지하고 있어야한다는 것이다. 특히, fetch join 을 사용할 경우 예외가..
@Modifying 의 flushAutomatically 속성을 명시해야 하는 이유
개요 @Modifying 어노테이션을 사용하다가 생긴 이슈를 해결하며 얻은 지식을 작성해보고자 합니다. 일단 먼저 정답부터 이야기하자면, hibernate 의 FlushModeType 설정의 기본 값인 Auto 일 때, JPQL 실행 전에 모든 쓰기 지연 저장소의 쿼리들이 flush 되는 줄로 잘못 알고 있어서 발생한 이슈입니다. JPQL 실행 전에 쓰기 지연 저장소에 있는 쿼리 중 JPQL 과 관련된 엔티티에 대해서만 flush 합니다. 더 자세한 설명은 아래에서 이어서 하도록 하겠습니다. @Modifying 이란 @Modifying 이 무엇인지부터 먼저 알아보겠습니다. @Modifying 어노테이션은 @Query를 이용하여 INSERT, UPDATE, DELETE쿼리를 작성할 경우 사용해줘야하는 어노..