2016-01-06 74 views
2

我試圖通過使用限制查詢來限制查詢結果。如果超出限制,查詢將按預期工作。按日期排序春季數據的描述限制JPA

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

但是當我嘗試使用限制(節數記錄),以限制記錄如下,

@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] 

如何在彈簧數據jpa查詢中使用限制查詢命令?

+0

否JPQL引用會向您顯示「LIMIT」,因爲它不是有效的語法。閱讀文檔! –

回答

2

您無法爲Query註釋添加分頁支持。當您使用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 encasulates排序和分頁功能,爲spring data jpa doc說:

添加Pageable實例的查詢方法動態地添加分頁到 您靜態定義的查詢。 A Page知道可用的元素和頁面的總數 。它通過基礎設施 觸發計數查詢來計算總數。由於此 可能會很昂貴,具體取決於所使用的商店,因此可以使用Slice作爲 返回。 A Slice只知道是否有下一個Slice 可用,這可能只是在走路時認爲是一個較大的 結果集。

所以,你可以使用:

@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); 

另外:

排序選項是通過可分頁實例處理過。

+0

JPQL DOES支持分頁...但是這是在JPA查詢對象上使用setMaxResults/setFirstResult。 –

+1

我的不好,我的答案是'@ Query'註釋的背景下,我會修復我的答案 –

+1

@NeilStockton - 這不是分頁,這是限制和補償。另外,* JPQL *不支持查詢API。 –