【问题标题】:Spring Data JPQL Could not extract resultsetSpring Data JPQL 无法提取结果集
【发布时间】:2015-02-18 11:35:41
【问题描述】:

我想获取分数和日期列在给定范围内的条目数,按分数间隔分组。分数间隔由给定的粒度决定。所以我要回答的问题是:在给定的时间段内,有多少结果,分数在 0-25、26-50、56-75 等之间……在这种情况下,粒度为 25 .

以下本机 SQL 查询产生所需的结果:

SELECT result.score, COUNT(*), ((score-1) DIV 25) AS eqclass FROM v_result AS result GROUP BY (eqclass);

我想用我自己的查询定义一个查询方法,使用@Query注解。

@Query("SELECT new com.example.ScoreDistribution(COUNT(scoreStatistics.score), (scoreStatistics.score - 1) / :granularity) FROM ScoreStatisticsEntity scoreStatistics WHERE start_date BETWEEN :startDate AND :endDate GROUP BY ((scoreStatistics.score - 1) / :granularity)")
List<ScoreDistribution> calculateDistributionByGranularity(@Param("startDate") DateTime startDate, @Param("endDate") DateTime endDate, @Param("granularity") int granularity);

ScoreDistribution 是一个简单的 bean,它不是一个实体。然而ScoreStatisticsEntity 是一个实体,它由一个视图表支持。

我得到以下异常:

org.springframework.dao.InvalidDataAccessResourceUsageException:无法提取结果集; SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException: could not extract ResultSet

Hibernate API 文档状态:

public class SQLGrammarException extends JDBCException

JDBCException 的实现指示发送到数据库服务器的 SQL 无效(语法错误、无效的对象引用等)。

那么,问题是:我的查询出了什么问题?

【问题讨论】:

  • 不应该 WHERE start_date 类似于 WHERE scoreStatistics.startDate
  • 哇...这么长的帖子,这么愚蠢的错误...请将此观察结果作为答案发布,以便我接受!
  • 刚刚做了,很高兴它有帮助:)

标签: java hibernate jpa spring-data jpql


【解决方案1】:

WHERE start_date 应该类似于 WHERE scoreStatistics.startDate

【讨论】:

    猜你喜欢
    • 2021-11-10
    • 2013-06-13
    • 2020-11-17
    • 2014-07-16
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    相关资源
    最近更新 更多