SpringData Avg NullPointerException

时间:2017-10-25 17:39:20

标签: java spring hibernate spring-data

我想计算一个列的平均值,但我得到的是NPE。

使用:

@Query(value = "SELECT avg(mood) FROM Mood WHERE date = :date")
Double getAvgMoodByDate(@Param("date")LocalDate date);

我得到了:

Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.lang.Double
....
Caused by: java.lang.NullPointerException: null

然后我创建了自己的@Repository

实现
public Double avgByDate(LocalDate date) {
  return (Double) entityManager.createQuery("SELECT avg(Mood.mood) FROM Mood WHERE Mood.date = :date")
          .setParameter("date", Date.valueOf(date))
          .getSingleResult();
}

这种方法也导致了

java.lang.NullPointerException: null

请你指出我可能出错的地方。

1 个答案:

答案 0 :(得分:1)

似乎问题出在您使用Mood.date时,请使用别名FROM Mood m,同时尝试使用coalesce,如下所示:

@Query(value = "SELECT coalesce(avg(m.mood), 0) FROM Mood m WHERE m.date = :date")