微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JPA - 从 OneToMany 关系中获取给定条件的数据

如何解决JPA - 从 OneToMany 关系中获取给定条件的数据

我正在从 objects 中选择一个 table e 列表,它们与另一个表中的对象具有 one to many 关系。我想获取所有对象,但只获取某些取决于某个属性的其他对象。例如,一个电影列表,每个电影都有一系列与之相关的演员,但我只想获得分配给他们薪水的演员。它现在的工作方式仍然返回所有演员的所有电影,唯一的条件是至少有一个演员有薪水:

SELECT m FROM movies LEFT JOIN m.actors a WHERE a.salary IS NOT NULL 

我对它在 JPA 中的工作方式没有经验,不确定对于这种情况最简单的解决方案是什么。

解决方法

通常,电影和演员是多对多的关系——一部电影可以有很多演员,而一个演员会出演多部电影。

然而,假设演员只演过一部电影,并且演员实体有 MOVIE_ID 作为存储电影 ID 的列,使用 JPQL 我会写我的查询:

SELECT m.id,m.name FROM Movie m 
INNER JOIN Actor a ON a.movieId = m.id AND a.salary IS NOT NULL 
GROUP BY m.id,m.name

为了更好地帮助您,请添加您的 Movie 和 Actor 实体类。

编辑:更新了上面的 JPQL 查询以排除没有演员赚取任何薪水的电影。

描述:如果你做 LEFT join,你会得到所有电影的列表,无论是否符合你的条件。

如果你做内联,你只会得到那些满足你至少有一个演员拿到薪水的条件的电影。

但是,通过连接,如果一部电影中有多个演员,您将获得一部电影的多条记录。为避免这种情况,请使用 GROUP BY 子句。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。