spring - Spring Boot @Formula 在每个结果上显示相同的 likeCount
问题描述
我的@Formula 字段有问题。我有三个表:user_acc、song 和 user_likes_song。我正在尝试根据歌曲 ID 在多对多表中出现的次数来显示歌曲的 likeCount。
我在 Song 实体中的 @Formula 字段如下所示:
@Formula("(SELECT COUNT(s.id) FROM user_acc u INNER JOIN user_likes_song us on u.id = us.user_id " +
"INNER JOIN song s on us.song_id = s.id WHERE us.song_id = s.id )")
private Long likeCount;
目前,当我第一次喜欢一首歌时,它会在每个结果上显示“likeCount:1”。在我喜欢另一首歌后,它会在每个结果中返回“likeCount: 2”,依此类推。
在我看来,它似乎是在计算所有喜欢的总数,而不是针对特定歌曲。我怎样才能让它显示特定歌曲 ID 在多对多表中出现的次数?
解决方案
您对每首歌曲行进行匹配:
INNER JOIN song s on us.song_id = s.id WHERE us.song_id = s.id
您想要的是将其限制为当前歌曲实体实例。
事实上,如果@Formula
注解是在Song
实体的某个字段上指定的,你并不想Song
在查询中指定,而是想直接引用当前实体的字段(这里id
),即:
WHERE us.song_id = id
所以这应该做的工作:
@Formula("(SELECT COUNT(*) FROM user_acc u INNER JOIN user_likes_song us on u.id = us.user_id " + "WHERE us.song_id = id )")
而且我认为您还可以通过这种方式进行更多简化:
@Formula(" (SELECT COUNT(*) FROM user_likes_song us WHERE us.song_id = id) ")
因为与用户帐户的加入无关紧要。
推荐阅读
- javascript - npm install(在预安装时优雅地停止进程)
- ssl - 如何禁止使用低版本 ssl 的请求?
- postgresql - 在 Pyspark 中填充一个空的 postgres 数据库
- pandas - 使用滞后值的 Pandas 变量
- c - 如何在 C 中的“if”中打印一个字符
- django - 缓存 django 查询集的 id 列表,并将该列表重用于另一个视图集
- java - 在 Spring Boot(云应用程序)中无法连接到 Oracle DB
- python - 扩展 markdown jupyter nbconvert 模板以删除代码块,但保留代码块的 markdown 输出
- python - Pygame 没有响应
- java - 如何使用 maven 部署 de-Lombok-ed 源