为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过 Spring 数据计算 OneToMany 元素的项目

如何通过 Spring 数据计算 OneToMany 元素的项目

慕莱坞森 2023-05-24 15:32:44

我有一个用户实体:


@Entity

@Table(name = "user")

@Data

public class UserEntity extends BaseEntity {

    @Column(name = "full_name")

    private String fullName;

    ....

    @OneToMany(cascade = CascadeType.REMOVE)

    @JoinTable(name = "user_post",

            joinColumns = {@JoinColumn(name = "user_id")},

            inverseJoinColumns = {@JoinColumn(name = "post_id")})

    private Set<PostEntity> posts;

    @ManyToMany

    @JoinTable(name = "user_followers",

            joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},

            inverseJoinColumns = {@JoinColumn(name = "follower_id", referencedColumnName = "id")})

    private Set<UserEntity> followers = new HashSet<>();

    @ManyToMany

    @JoinTable(name = "user_followings",

            joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},

            inverseJoinColumns = {@JoinColumn(name = "following_id", referencedColumnName = "id")})

    private Set<UserEntity> followings = new HashSet<>();


}

现在我想计算一个用户的关注者。我可以获得关注者列表并使用 list.size() 但这并不好。我只想计算它们而不是整个对象。这可以通过我的 UserRepostiory 中扩展 JpaRepostiory 或本机查询的方法实现吗?


查看完整描述

1 回答

?
慕田峪4524236

TA贡献1718条经验 获得超5个赞

我建议你使用 JPQL 语法。在UserRepository你可以添加计数方法。请尝试 :


@Query("select count(p) from User u join u.posts p where u.id = ?1")

long countPosts(Long id);


@Query("select count(f) from User u join u.followers f where u.id = ?1")

long countFollowers(Long id);


@Query("select count(f) from User u join u.followings f where u.id = ?1")

long countFollowings(Long id);


查看完整回答
反对 回复 5天前
  • 1 回答
  • 0 关注
  • 7 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信