不知何故,我无法在使用 LIMIT
的 sql 查询中使用 Spring-data-jpa
:
@Query("SELECT p from Person p WHERE p.company.id = :id ORDER BY p.name DESC LIMIT 3")
这里有什么问题?
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: Limit near line 1, column 146
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:304)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)
... 48 more
原文由 membersound 发布,翻译遵循 CC BY-SA 4.0 许可协议
LIMIT
不是 JPQL 的一部分。当前版本(撰写本文时为 1.6.0.RELEASE)中可用的机制是分页:然后可以按如下方式使用:
这将返回
@Query
注释中定义的查询的前十个结果。Spring Data JPA 的当前 master 分支已经包含一个新功能,允许您按如下方式重写上述查询:
从版本 1.7.0.M1( 快照 中 已提供 的功能)开始,查询派生机制将理解主题子句中的
Top
和First
以限制返回的结果数。更新 为
new PageRequest
已弃用你需要使用PageRequest.of(0, 10)
代替