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

标签 java hibernate jpa spring-data

我有一个用户实体:

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

最佳答案

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

关于java - 如何通过 Spring 数据计算 OneToMany 元素的项目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57397146/

相关文章:

java - 多 J2EE 应用程序系统中具有惰性字段的实体的最佳实践

java - java中的图像操作

java - 视频文件的位置在哪里

java - Hibernate如何为实体类配置模式名称

java - Hibernate:evict()一个持久对象,同时存储其更改

java - 构建 CriteriaBuilder 查询来比较列表

jsf - 需要 EJB 3.1 Singleton + JPA + JSF 设计建议

java - Java 是否具有与 C# 的 XML 属性等效的功能?

java - Guava 不可变版本的 LinkedHashMultimap?

spring - 带有可选参数的 jpa 查询