我正在使用JPQL实现PostgreSQL查询.

这是一个本机psql查询示例,运行良好,

SELECT * FROM students ORDER BY id DESC LIMIT 1;

JPQL中的相同查询不起作用,

@Query("SELECT s FROM Students s ORDER BY s.id DESC LIMIT 1")

Students getLastStudentDetails();

似乎限制子句在JPQL中不起作用.

根据JPA文档,我们可以使用setMaxResults/setFirstResult,有人能告诉我如何在我的上述查询中使用它吗?

推荐答案

您使用的是JPQL,它不支持这样限制结果.当使用原生JPQL时,应该使用setMaxResults来限制结果.

不过,您使用的是Spring数据JPA,这基本上使它非常容易实现.关于如何基于查询限制结果,请参见参考指南中的here.在您的情况下,下面的find方法将完全满足您的要求.

findFirstByOrderById();

您还可以在查询中使用Pageable参数,而不是LIMIT子句.

@Query("SELECT s FROM Students s ORDER BY s.id DESC")
List<Students> getLastStudentDetails(Pageable pageable);

然后在调用代码中执行类似的操作(如参考指南中的here所述).

getLastStudentDetails(PageRequest.of(0,1));

两者都应该产生相同的结果,而不需要求助于普通SQL.

Mysql相关问答推荐

MySQL binlog事件上的并发事务行为

优化使用ORDER BY加载耗时较长的MySQL请求

用于搜索从各种表中获得的结果的查询

递归查询意外地为一个字段返回空值

仅获取我不是最后一个 comments 者的博客帖子

PythonAnywhere中SSH到MySQL数据库无限期挂起,SSH正确,workbench可以完美连接

为大表优化 Django 模型

仅当 SELECT 语句在 MySQL 中给出空集时才执行 UPDATE 语句

将 AVG 与 HAVING 结合使用

为生日创建 MySQL 索引

Mysql,显示谁已经和没有 Select 退出巴士服务

为什么order by子句可以利用索引?

如何将内置的时间浏览器过滤器反映到 Grafana 中的 mysql 查询中?

mySQL 中的主数据库和 IF 错误?

MySql查询无结果

SQL UPDATE中的str_replace?

如何使用 laravel 连接 mysql?

Ansible 幂等 MySQL 安装 Playbook

MySQL - 表'my_table'没有被锁定表锁定

mysql 数据类型仅存储月份和年份