Spring Data JPQL无法提取结果集

时间:2014-12-19 14:01:05

标签: java hibernate jpa spring-data jpql

我想获得分数和日期列在给定范围内的条目数,按分数间隔分组。分数间隔由给定的粒度决定。所以我想回答的问题是:在给定的时间段内有多少结果,分数在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:无法提取ResultSet; SQL [不适用];嵌套异常是org.hibernate.exception.SQLGrammarException:无法提取ResultSet

Hibernate API doc说明:

public class SQLGrammarException extends JDBCException
  

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

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

1 个答案:

答案 0 :(得分:0)

WHERE start_date应该是WHERE scoreStatistics.startDate