【问题标题】:how to count items of OneToMany element via Spring data如何通过 Spring 数据计算 OneToMany 元素的项目
【发布时间】:2019-08-07 14:51:26
【问题描述】:

我有一个用户实体:

@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 的方法或本机查询来实现吗?

【问题讨论】:

    标签: java hibernate jpa spring-data


    【解决方案1】:

    我建议你使用 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-16
      • 2023-03-29
      • 1970-01-01
      • 2023-03-12
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多