java JPQL中的LIMIT子句是什么?
我正在使用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
,有人能告诉我如何在我的上述查询中使用它吗
# 1 楼答案
硬编码分页(
new PageRequest(0, 1)
)以实现仅获取一条记录您必须传递
new PageRequest(0, 1)
来获取记录,并从列表中传递来获取第一条记录# 2 楼答案
JPQL不允许将limit关键字添加到HQL生成的查询中。您将得到以下异常
但别担心,还有一种替代方法,可以使用以下步骤在HQL生成的查询中使用limit关键字
请参阅以下服务类别
服务:
存储库界面应实现分页和排序存储库
存储库:
这将为您的查询添加limit关键字,您可以在控制台中看到该关键字。希望这有帮助
# 3 楼答案
不能在
HQL
中使用Limit
,因为Limit
依赖于数据库供应商,所以Hibernate
不允许通过HQL
查询可以实现的一种方法是使用子查询:
# 4 楼答案
您好,获取单行并在jpql中使用LIMIT,我们可以告诉jpql它是否是本机查询
(使用-nativeQuery=true)
下面是用法
# 5 楼答案
如评论中所述,JPQL不支持
LIMIT
关键字您可以使用
setMaxResults
来实现这一点,但是如果您想要的只是一个项目,那么就使用getSingleResult
——如果找不到任何项目,它会引发异常因此,您的查询将类似于:
如果要设置特定的起始偏移量,请使用^{;也是
# 6 楼答案
您使用的是JPQL,它不支持这样限制结果。当使用原生JPQL时,应该使用
setMaxResults
来限制结果不过,您使用的是Spring数据JPA,这基本上使它非常容易实现。请参阅参考指南中的here,了解如何基于查询限制结果。在您的情况下,下面的find方法将完全满足您的要求
您还可以在查询中使用
Pageable
参数,而不是LIMIT
子句然后在调用代码中执行类似的操作(如参考指南中的here所述)
两者都应该产生相同的结果,而不需要求助于普通SQL