Pageable로 Limit 걸기


JPA, JPQL 을 사용하다가 Limit이 필요한 경우가 생겼었습니다.


JPQL에 limit을 사용하니 에러가 발생하여 찾아보니 JPA, JPQL 에서 limit의 기능을 사용하려면 다른 방법을 사용해야 합니다.



Pageable limitOneHundred = new PageRequest(startPosition, 100);
List<SelectAll> tempList = requestRepository.findAllByDate(startDate, targetDate, limitOneHundred);

@Query(value = "SELECT n " +
"FROM LogRequest n " +
"WHERE DATE(n.regDate) >= :date " +
"AND DATE(n.regDate) = :targetDate " +
"ORDER BY n.no")
public List<SelectAllNaver> findAllByDate(@Param("date") Date date,
@Param("targetDate") Date targetDate,
Pageable limitOneHundred);



Pageable 을 사용하면 limit을 사용하는 것처럼 범위를 지정하여 페이징을 할 수 있습니다.

혹은 아래와 같이 Query annotation의 nativeQuery 옵션을 true로 하여 limit을 사용하는 방법도 있습니다.



@Query(nativeQuery = true, value = "select * from SLSNotification s where s.userId = :userId ORDER BY snumber desc LIMIT 20")
List<SLSNotification> getUserIdforManage(@Param("userId") String userId);




참조.

http://www.baeldung.com/spring-data-jpa-query

https://stackoverflow.com/questions/47616482/how-to-limit-result-in-query-used-in-spring-data-repository

+ Recent posts