Spring Boot @Formula在每个结果上显示相同的likeCount

时间:2019-04-28 10:05:16

标签: spring spring-boot

我的@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在多对多表格中出现多少次?

1 个答案:

答案 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) ")

因为与用户帐户的加入无关紧要。