首页 > 解决方案 > JPQL:当数据库中不存在对象时切换/案例

问题描述

我正在@Query为存储库方法编写一个。此查询应返回Movie平均值Rating小于给定参数值的所有值:

@Query(value =
    "select m from Movie m " +
    "where (select avg(r.rating) from Review r " +
    "where m.id = r.movie.id) < :rating")
List<Movie> findMoviesWithAverageRatingLowerThan(@Param("rating") Double rating);

问题是我有一个要求,当 aMovie没有评级时,它应该被解释为平均评级等于0

我有一个线索,我应该switch/case与 结合使用when,但目前我不知道该怎么做。

这甚至可以在一个查询中实现吗?

标签: sqlspringhibernatespring-datajpql

解决方案


您可以尝试使用COALESCE表达式,如下所示:

@Query(value =
    "select m from Movie m " +
    "where (select avg(COALESCE(r.rating, 0)) from Review r " +
    "where m.id = r.movie.id) < :rating")
List<Movie> findMoviesWithAverageRatingLowerThan(@Param("rating") Double rating);

推荐阅读