当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA中的按日期排序描述限制

易京
2023-03-14

我正在尝试使用限制查询来限制查询结果。在没有限制的情况下,查询按预期工作。

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

但当我尝试使用limit(记录数)来限制记录时,如下所示:,

@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查询中使用order by limit查询?

共有2个答案

洪子晋
2023-03-14

其他答案都没有真正回答您的问题,即如何限制到前2个开始时间降序。我不知道如何使用jpql来做到这一点,但是使用jpa查询,你可以找到Top2ByOrderByStartTimeDesc

另外,请参阅这篇文章,我将如何在Spring数据存储库中编写SELECT TOP 25 sql查询您可以在存储库中使用您的查询:

@Query("SELECT a FROM DrmAdpodTimeSlot a WHERE a.startTime>'?1' ORDER BY a.startTime DESC")
    List<DrmAdpodTimeSlot> findByStartTime(String startTime, Pageable pageable);
}

在服务中,使用页面请求,返回页面对象:

Page<DrmAdpodTimeSlot> top2 = arcustRepository.findByStartTime(arcustno, PageRequest.of(0, 2));
List<DrmAdpodTimeSlot> top2StartTimes = top2.getContent();
夏侯英纵
2023-03-14

不能向查询批注添加分页支持。使用Spring数据 JPA 时,无需将排序和分页功能添加到 HQL/JPQL 中。请改用 Pageable 作为第二个参数,如下所示:

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

可分页包含排序和分页功能,如Spring数据jpa文档所述:

Pageable实例添加到查询方法中,以将分页动态添加到静态定义的查询中。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);

也:

排序选项也是通过可分页实例来处理的。

 类似资料:
  • 问题内容: 我试图通过使用限制查询来限制查询结果。超出限制,查询按预期运行。 但是,当我尝试通过使用限制(记录数)来限制记录时,如下所示, 从上面的查询中,我收到以下错误, 如何在Spring Data JPA查询中使用按限额查询定单? 问题答案: 您不能向注释添加分页支持。使用Spring Data JPA时,无需在其中添加排序和分页功能。使用作为第二个参数,而不是像如下: 封装了排序和分页功能

  • 我正在开发一个应用程序,该应用程序接收,带有,格式为。以下是JSON数据格式。 我想根据最新的时间戳对NOTNUMBER进行排序。我尝试了,也尝试了,但在静脉中。结果是升序。我希望日期戳以降序排序。我也尝试了使用,但不起作用。我想在这一天排序: 在使用过滤器参数时有点困惑。 请帮帮我。提前感谢

  • 问题内容: 我尝试按ASC顺序在表上使用Spring-Data-JPA创建应用程序,但它给了我一个错误: 为什么 ? 或者 问题答案: 尝试在“全部”和“订单”之间添加“按”,如下所示:

  • 我在Cassandra中创建了一个表,用于监控应用程序的插入。我的分区键是一个int,由年月日组成,我的集群键是一个时间戳,之后是我的用户名和其他一些字段。 我想显示最后5个插入,但似乎分区键位于“order by desc”之前。 怎样才能得到正确的结果?正常的聚类键归纳顺序,为什么我会得到这个结果?(提前致谢) 信息: 结果: 通缉:< br > 我的表:

  • 问题内容: 我想按日期订购。 例如 我已经尝试过: 伯,这是行不通的。 我得到这个代替: 你能帮我吗? 问题答案: 如果要按日期排序, 请将其存储为日期而不是字符串。 除非您的日期字符串的格式为,否则它不会按您希望的顺序排序。 数据库可以按原样进行足够的工作,而无需人们加倍努力,因此,您应该尽可能地避免我喜欢的 SQL体操。 将其存储为日期,然后(如果需要)使用日期函数以形式获取它。 这样会比您尝

  • 问题内容: 我知道这一定是相对简单的,但是我有一个JSON数据集,我想按日期排序。到目前为止,我无处不在遇到问题。现在,我将日期存储为。如果有帮助,我可以访问jquery,但是我意识到.sort()是本机JS。提前致谢。 问题答案: 假设您有一个javascript对象数组,只需使用自定义排序功能即可: Array 方法使用回调函数对数组进行排序,该回调函数传递给数组中的元素对。 如果返回值为负,