JPQL @Query 导致“意外令牌:(”

dam*_*ter 2 jpql spring-data-jpa

我定义了以下方法:

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

但是它会导致此错误:

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]
Run Code Online (Sandbox Code Playgroud)

但以下 SQL 工作正常:

SELECT AVG(total) FROM (SELECT COUNT(NAME) total FROM DATA_TABLE GROUP BY DATE(actiontime)) result 
Run Code Online (Sandbox Code Playgroud)

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

Mad*_*apu 7

我认为 jpql 不支持subselectwithfrom子句。根据jpa 文档

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

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