Spring
JPQL 로 ORDER BY RAND() LIMIT N 사용하기
주씨.
2024. 3. 12. 20:57
728x90
테이블에서 데이터를 랜덤으로 10개 추출해야 하는 상황.
JPQL 에서는 LIMIT 키워드를 지원하지 않는다.
그래서 나는 지금껏 Native Query 로 작성해왔다.
JPQL 로 할 방법이 없을까 탐색하던 중, JPQL 로 구현하는 방법을 찾았다.
우선, 1. RAND() 부분과 2. LIMIT 부분으로 나누어 구현해야 한다.
1. RAND()
JPQL 의 FUNCTION 을 이용한다.
2. LIMIT N
JPQL 에서는 LIMIT 키워드를 제공하지 않기 때문에, JPA query method 의 결과를 제한하는 방식으로 구현한다.
이를 위해 Pageable 을 인자로 넘겨주는 방식을 택했다.
Pageable 인스턴스는 PageRequest.of() 메서드를 이용하여 생성했다.
pageNumber 는 0 으로, pageSize 를 10으로 하여 불러올 데이터의 결과를 10개로 제한하였다.
최종 쿼리
Native Query 를 사용하지 않고 JPQL 만으로도 ORDER BY RAND() LIMIT N 쿼리를 생성할 수 있었다.