意外的令牌:在休眠状态下使用 spring data jpa 时的位置

Posted

技术标签:

【中文标题】意外的令牌:在休眠状态下使用 spring data jpa 时的位置【英文标题】:unexpected token:where when using spring data jpa with hibernate 【发布时间】:2018-04-26 20:09:04 【问题描述】:

我正在尝试在我的项目中使用 spring data jpa 和 hibernate。我在存储库中添加了注释@Query,尝试编写一个带有Pageable参数的hql,如下所示:

@Query("select name,code,id from Region where fatherId is NULL or fatherId=''") Page<Region> findAllRoots(Pageable pageable);

但是当我尝试编译并运行它时,我得到了意想不到的令牌:控制台打印的位置。完整信息是:

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: where near line 1, column 14 [select count(where) from com.nitccs.demo.entity.Region where fatherId is NULL or fatherId='']

怎么会这样跑?我完全糊涂了。为什么它不是 select count(id) 之类的?我确定我的 pojo 中没有名为 where 的变量。

【问题讨论】:

【参考方案1】:

You need an alias in your query in order for the count query necessary for Pageable results getting created correctly。所以这应该可行。

select r from Region r where r.fatherId is NULL or r.fatherId=''

【讨论】:

谢谢,没有你的帮助,我需要更长的时间才能意识到这一点。谢谢你,真的。【参考方案2】:

在您上面的查询中,您做错了,您期望 name,code,id 以及它将如何转换为 Region 对象

如果您想要分页数据,请尝试使用SpringData specifications

click here 看看这个

【讨论】:

谢谢!我在你的指导下修好了。好像没有写过hql,也没有写过sql。 表达感谢的方式就是点赞并接受正确答案。

以上是关于意外的令牌:在休眠状态下使用 spring data jpa 时的位置的主要内容,如果未能解决你的问题,请参考以下文章

休眠错误消息:意外令牌:NULLS(脚本文件行中的错误:13 意外令牌:NULLS)

休眠异常:意外令牌:HAVING

Groovy:使用 Grails 和 Spring 安全核心插件时出现意外令牌

Spring Boot,Hibernate,Querydsl:antlr.NoViableAltException:意外令牌

HTTP 状态 500 - 意外令牌:,靠近第 1 行,第 129 列

REST端点身份验证的Spring Security意外行为?