【问题标题】:JPARepository JPQL @query ORDER BY (ERROR: expecting CLOSE, found 'null' )JPARepository JPQL @query ORDER BY (错误:期待关闭,找到'null')
【发布时间】:2016-10-21 16:02:16
【问题描述】:

.im 使用 JPARepository + Hibernate,并且我有下一个查询 wuth 子查询,该子查询按找到的数字或寄存器排序子结果。

 @Query("SELECT t0 FROM TextFragment t0 WHERE t0.id = "
+ "(SELECT t.id FROM TextFragment t JOIN t.fragment f JOIN t.reactionsTextFragments r "
+ "WHERE f.parent.id = :idParent AND t.codStateTextFragment = '001' "
+ "GROUP BY r.textFragment ORDER BY COUNT(r.textFragment) DESC, t.updatedDate ASC)")

我有下一个错误

原因:org.hibernate.hql.internal.ast.QuerySyntaxException:期待关闭,在第 1 行第 254 列附近发现“null”[select count(t0) FROM com.treebuk.model.TextFragment t0 WHERE t0.id = (SELECT t.id FROM com.treebuk.model.TextFragment t JOIN t.fragment f JOIN t.reactionsTextFragments r WHERE f.parent.id = :idParent AND t.codStateTextFragment = '001' GROUP BY r.textFragment]

为什么查询不读取ORDER BY 子句和Query 的final?我不明白...有人可以帮助我吗?

【问题讨论】:

    标签: hibernate jpa repository hql jpql


    【解决方案1】:

    在 JPQL 中,子查询不能有 ORDER BY。根据 BNF

    subquery ::= simple_select_clause subquery_from_clause [where_clause] [groupby_clause] [having_clause]
    

    因此,您的查询无效。遗憾的是,错误消息并未明确说明问题所在。

    【讨论】:

    • 回复 Neil。但我不明白 JPARepository 解决了这个问题。有什么解决办法吗?我需要为过滤器寄存器做一个子查询。是唯一的solition在代码后面做逻辑吗?
    • "JPARepository" 与 JPA API 无关。 JPQL 语言规范非常明确(Hibernate 显然正在遵循它)并且 ORDER BY 在子查询中是非法的。删除您的 ORDER BY
    • 我无法删除订单,真的我也需要一个限制,只需要获得更多反应文本片段的寄存器......我需要一个复杂的查询......我不明白 JPA 没有对此的支持。
    • 子查询也不能有限制;请至少阅读有关您选择使用的技术的规范。如果您想使用各种特定于 SQL 的功能,请使用 NATIVE SQL 并失去数据库独立性。
    • 抱歉,我是 Java、Sring、Hibernate、JPA 的新手……我正在用这项技术制作一个复杂的项目,我尝试使用我所知道的最好的形式……简单地说,我尝试在项目的这一点上解决我的问题......我对 Spring MVC、JPARepository 和 Hibernate 有太多的逻辑......我可以使用 NATIVE SQL 创建一个特定的方法吗?还是不可能?如何?发现了什么?
    猜你喜欢
    • 2013-04-30
    • 2012-02-25
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2013-11-20
    • 2013-12-30
    相关资源
    最近更新 更多