【问题标题】:JPQL @Query causing "unexpected token: ("JPQL @Query 导致“意外令牌:(”
【发布时间】:2016-03-26 08:18:31
【问题描述】:

我定义了以下方法:

@Query("SELECT AVG(total) FROM (SELECT COUNT(t.name) total FROM DataTable t GROUP BY DATE(actiontime)) result")
Long countAvg();

但是它会导致这个错误:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected     token: ( near line 1, column 24 [SELECT AVG(total) FROM (SELECT     COUNT(t.name) total FROM backend.DataTable t GROUP BY     DATE(actiontime)) result]

但以下 SQL 工作正常:

SELECT AVG(total) FROM (SELECT COUNT(NAME) total FROM DATA_TABLE GROUP BY DATE(actiontime)) result 

如果我理解正确,JPQL 的子查询有问题。那我应该如何创建这种查询呢?

【问题讨论】:

    标签: spring-data-jpa jpql


    【解决方案1】:

    我认为 jpql 不支持 subselectfrom 子句。根据jpa docs

    在此版本中,子查询仅限于 WHERE 和 HAVING 子句。 FROM 子句中对子查询的支持将在以后的规范版本中考虑。

    您可以在 @Query 注释中使用 nativeQuery = true 并将其作为本机查询运行,或者尽可能重写查询。

    【讨论】:

    • 但是NativeQuery 不支持排序
    猜你喜欢
    • 2021-12-03
    • 2019-05-14
    • 2018-08-02
    • 2015-08-30
    • 1970-01-01
    • 2016-04-27
    • 2021-05-24
    • 2016-06-18
    • 2017-02-13
    相关资源
    最近更新 更多