250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 낙관적락
- querydsl
- 연결리스트
- 스토어드 프로시저
- JPQL
- BOJ
- FetchType
- 다대일
- 동적sql
- CHECK OPTION
- exclusive lock
- dfs
- 연관관계
- 일대다
- 백트래킹
- SQL프로그래밍
- 힙
- 유니크제약조건
- PS
- eager
- execute
- 데코레이터
- 스프링 폼
- 비관적락
- 다대다
- fetch
- 즉시로딩
- 지연로딩
- shared lock
- 이진탐색
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
JPQL 로 ORDER BY RAND() LIMIT N 사용하기 본문
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 쿼리를 생성할 수 있었다.
'Spring' 카테고리의 다른 글
메서드 호출 결과를 캐시에 저장하는 @Cacheable 과 @CacheEvict (0) | 2024.03.28 |
---|---|
Redis 를 사용하여 Refresh Token 구현하기 (0) | 2024.03.28 |
쿼리를 5,000번 날리는 API가 있다?😬 쿼리 줄이기 8시간 삽질 후기 (0) | 2024.02.15 |
[JPA] findById() 와 getReferenceById() (2) | 2024.02.09 |
Spring Security + JWT 흐름 간략하게 (0) | 2024.01.21 |