흰 스타렉스에서 내가 내리지

JPQL 로 ORDER BY RAND() LIMIT N 사용하기 본문

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개로 제한하였다. 

Service 에서 메서드 호출
Repository 에서 메서드 정의

 

 

 

최종 쿼리

 

Native Query 를 사용하지 않고 JPQL 만으로도 ORDER BY RAND() LIMIT N 쿼리를 생성할 수 있었다.