복붙노트

[SPRING] 봄 데이터의 날짜 별 제한 사항 JPA

SPRING

봄 데이터의 날짜 별 제한 사항 JPA

제한 쿼리를 사용하여 쿼리 결과를 제한하려고합니다. 제한을 초과하면 쿼리가 예상대로 작동합니다.

@Query("SELECT a FROM DrmAdpodTimeSlot a where a.startTime > :startTime order by a.startTime desc")
    public List<DrmAdpodTimeSlot> findByStartTime(@Param("startTime") Timestamp startTime);

그러나 다음과 같이 제한 (no.of records)을 사용하여 레코드를 제한하려고 할 때,

@Query("SELECT a FROM DrmAdpodTimeSlot a where a.startTime > :startTime order by a.startTime desc limit 2")
    public List<DrmAdpodTimeSlot> findByStartTime(@Param("startTime") Timestamp startTime);

위의 쿼리에서 다음 오류가 발생했습니다.

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: limit near line 1, column 110 [SELECT a FROM com.dooreme.domain.DrmAd
podTimeSlot a where a.startTime > :startTime order by a.startTime desc limit 2]

Spring 데이터 jpa 쿼리에서 제한 쿼리를 사용하여 주문을 어떻게 사용할 수 있습니까?

해결법

  1. ==============================

    1.쿼리 주석에 페이지 매김 지원을 추가 할 수 없습니다. Spring Data JPA를 사용할 때 HQL / JPQL에 정렬 및 페이지 매김 기능을 추가 할 필요가 없습니다. 다음과 같이 Pageable을 두 번째 인수로 사용하십시오.

    쿼리 주석에 페이지 매김 지원을 추가 할 수 없습니다. Spring Data JPA를 사용할 때 HQL / JPQL에 정렬 및 페이지 매김 기능을 추가 할 필요가 없습니다. 다음과 같이 Pageable을 두 번째 인수로 사용하십시오.

    @Query("SELECT a FROM DrmAdpodTimeSlot a where a.startTime > :startTime")
    public List<DrmAdpodTimeSlot> findByStartTime(@Param("startTime") Timestamp startTime, Pageable pageable);
    

    Pageable은 스프링 데이터 jpa doc의 말처럼 정렬과 페이징 기능을 포함하고있다.

    따라서 다음 중 하나를 사용할 수 있습니다.

    @Query("SELECT a FROM DrmAdpodTimeSlot a where a.startTime > :startTime")
    public Page<DrmAdpodTimeSlot> findByStartTime(@Param("startTime") Timestamp startTime, Pageable pageable);
    

    또는:

    @Query("SELECT a FROM DrmAdpodTimeSlot a where a.startTime > :startTime")
    public Slice<DrmAdpodTimeSlot> findByStartTime(@Param("startTime") Timestamp startTime, Pageable pageable);
    

    또한:

  2. from https://stackoverflow.com/questions/34640488/order-by-date-desc-limit-in-spring-data-jpa by cc-by-sa and MIT license