我的@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在多对多表格中出现多少次?
答案 0 :(得分:1)
您要匹配每首歌曲:
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) ")
因为与用户帐户的加入无关紧要。