【问题标题】:How to use OFFSET and FETCH after ORDER BY DESC?ORDER BY DESC 后如何使用 OFFSET 和 FETCH?
【发布时间】:2021-02-19 23:54:36
【问题描述】:

此查询适用于我的数据库:

SELECT *
FROM notes
WHERE owner='69177f5e-a6d3-4ad9-b609-dd02586cb589'
ORDER BY creation_date DESC
OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY;

我想将它写入我的 JPA 存储库 @Query,但我无法在 DESC 之后继续编写查询,因为 IntelliJ 会在 OFFSET 下划线并显示 ',' or NULLS expected, got 'OFFSET'。在这种情况下我能做什么。是否可以使用 Spring Boot JPA 进行类似的查询?
非常感谢。

【问题讨论】:

  • 我猜您正在编写本机查询,但缺少#pagable 对象

标签: sql postgresql spring-boot jpa


【解决方案1】:
@Query("SELECT n from Notes n where n.owner='69177f5e-a6d3-4ad9-b609-dd02586cb589' ORDER BY n.creationDate DESC")
public Page<Notes> findAllByOwner(Pageable pageable);

这是伪代码,因此您必须填写必要的字段 creation_date 并且所有者字段必须与实体字段匹配

【讨论】:

  • JPA 将使用 Pageable 参数在后台进行排序,结果将与使用普通 SQL 查询相同(就像我的问题一样)?
  • 是的,你是对的,你必须根据限制和偏移量来指定你的分页对象。
  • 好的。我已经使用它并且一切正常。谢谢!
【解决方案2】:

您可以在这里使用LIMIT HQL 查询:

@Query("SELECT * FROM notes WHERE owner = '69177f5e-a6d3-4ad9-b609-dd02586cb589' ORDER BY creation_date DESC LIMIT 3")
List<Note> findAllOwners();

这将返回一个仅包含 三个 项的(有序)列表。由于您希望偏移量为 1,因此只需访问所需结果集的最后 两个 项。

具体来说,如果调用这个repository方法,可以试试:

List<Note> allOwners = yourInterface.findAllOwners();
allOwners.remove(0);  // this is now your desired result set

【讨论】:

    猜你喜欢
    • 2015-09-07
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2020-09-23
    • 2013-09-20
    • 2015-02-26
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多