我试图通过使用限制查询来限制查询结果。超出限制,查询按预期运行。
@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]
如何在Spring Data JPA查询中使用按限额查询定单?
您不能向Query注释添加分页支持。HQL/JPQL使用Spring Data JPA时,无需在其中添加排序和分页功能。使用Pageable作为第二个参数,而不是像如下:
Query
HQL/JPQL
Pageable
@Query("SELECT a FROM DrmAdpodTimeSlot a where a.startTime > :startTime") public List<DrmAdpodTimeSlot> findByStartTime(@Param("startTime") Timestamp startTime, Pageable pageable);
Pageable封装了排序和分页功能,如spring data jpa doc所述:
将Pageable实例添加到查询方法,以将分页动态添加到静态定义的查询。A Page知道可用元素和页面的总数。它是通过基础结构触发 计数查询 来计算 总数 来实现的。由于根据所用商店的不同,这可能会很昂贵,因此Slice可以将其用作退货。一个人Slice知道Slice 一个更大的结果集时,是否有一个下一个可用的步行空间就足够了。
Page
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);
也:
排序选项也通过Pageable实例处理。