JPQL:当数据库中不存在对象时切换/案例

Posted

技术标签:

【中文标题】JPQL:当数据库中不存在对象时切换/案例【英文标题】:JPQL: Switch/case when an object does not exist on the database 【发布时间】:2021-09-08 20:33:16 【问题描述】:

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

@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);

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

我知道我应该使用switch/casewhen 结合使用,但目前我不知道该怎么做。

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

【问题讨论】:

【参考方案1】:

您可以尝试使用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);

【讨论】:

以上是关于JPQL:当数据库中不存在对象时切换/案例的主要内容,如果未能解决你的问题,请参考以下文章

当架构中不存在字段时,如何防止 django 出错?

当数据中不存在分组变量的所有级别时,绘图之间的颜色比例和图例一致

生产环境会话对象中不存在 Passport 对象

vue中mixins的使用方法和数据-案例

仅当 Firebase Firestore 中不存在文档时才创建文档

条件查询,SQL,JPQL,HQL