一尘不染

Spring Data JPA中的按日期顺序描述限制

hibernate

我试图通过使用限制查询来限制查询结果。超出限制,查询按预期运行。

@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查询中使用按限额查询定单?


阅读 940

收藏
2020-06-20

共1个答案

一尘不染

您不能向Query注释添加分页支持。HQL/JPQL使用Spring Data
JPA时,无需在其中添加排序和分页功能。使用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
一个更大的结果集时,是否有一个下一个可用的步行空间就足够了。

因此,您可以使用以下任一方法:

@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实例处理。

2020-06-20