작성
·
33
0
현재 저희 프로젝트는 Spring Boot 3.3, Spring Data JPA, MySQL을 사용하고있습니다.
제가 강의를 통해서 JPQL에서는 Limit문법을 사용할 수 없으니 setMaxResults/setFirstResult와 같은 메소드를 통해서 페이징 처리를 해야 하는 것으로 알고 있습니다.
근데 프로젝트를 진행하다가 팀원이 limit문법을 통해서 조회를 하는 쿼리를 보았습니다.
(저희는 Spring Data JPA를 사용하고 있어 JPQL은 @Query 어노테이션을 활용하여 쿼리를 작성하고 있습니다.)
@Query("select Member m where m.nickname = "홍길동" limit 1")
위와 같은 쿼리로 데이터를 조회하는데 문제없이 애플리케이션이 돌아가는 것을 확인했습니다. Hibernate 버전이 6.x로 올라오면서 처리를 따로 해주는 걸까요? 만약 그렇다면 어느 버전에서 바뀐 것이고 어떻게 동작하길래 가능한건지 답변주시면 감사하겠습니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
새벽형개발자님, JPQL에서는 LIMIT
문법을 직접적으로 지원하지 않습니다.
Spring Data JPA에서는 @Query
어노테이션과 같은 JPQL을 활용할 때 페이징 처리를 위해 setMaxResults
와 setFirstResult
메서드를 사용하는 것이 일반적입니다. 그런데, JPQL에서는 기본적으로 이러한 메서드들을 직접 사용하여 페이징을 처리하지 않고, Pageable
인터페이스를 사용해 페이징 및 정렬을 처리할 수 있습니다.
제시하신 쿼리 “@Query(“select Member m where m.nickname = ‘홍길동’ limit 1”)“는 @Query
어노테이션의 사용 예일 가능성이 있습니다. nativeQuery = true
옵션을 사용하지 않는 이상 JPQL에서는 LIMIT
키워드를 사용할 수 없습니다. 따라서 이 경우에는 JPQL이 아닌 Native Query로 잘못 작성되었거나 의도한 바와 다른 동작을 할 수 있습니다.
Hibernate 6.x 버전과 관련된 변경 사항에 대한 공식 문서는 언급하지 않았습니다. 따라서, jpql 자체의 LIMIT
지원은 변경된 적이 없습니다. 의도한 쿼리가 정확히 동작하는 이유는 다른 곳에 있을 수 있습니다. 예를 들어, 데이터 접근 계층의 설정이나, 다른 부분에서 영향을 준 것이 아닌지 살펴보는 것이 필요합니다.
문제가 없다고 확실하면, 사용하고 계신 Hibernate 버전과 Spring Framework 종속성 등을 한번 더 확인하시고, 프로젝트 내에 어떤 커스터마이징된 구성이나 설정이 있는지 체크해 보시는 것을 추천드립니다.
도움이 되셨기를 바랍니다! 추가적인 질문이 있다면 언제든지 말씀해 주세요.