JPA - 对孩子列表进行分页

Posted

技术标签:

【中文标题】JPA - 对孩子列表进行分页【英文标题】:JPA - Paginate a list of childs 【发布时间】:2020-02-18 21:30:50 【问题描述】:

我目前正在开发一个使用 Spring 作为后端的应用程序,并且在使用 JpaRepository 时遇到了一些问题。

我们有一个系统,其中一些成员可以在一些组织中,所以一个成员可以在多个组织中,一个组织可以有多个成员。

在我的会员课程中,我有:

@ManyToMany
private List<Organization> organizations;

在组织类中:

@ManyToMany
private List<Member> members;

这是我的问题: 我需要返回组织成员的分页列表,问题是我想使用 JpaRepository 来实现分页系统的最简单实现,但我无法检索组织中的成员。

这是我在成员存储库中尝试过的:

   Page<Member> findAllByOrganizationsContains(@Param("organization") Organization organization, Pageable pageable);

但这没有给我任何回报,问题是我不明白如何从一个组织中获取成员,因为这个成员可以在多个组织中。

有什么想法吗?

【问题讨论】:

使用内部联接编写您自己的 Hql 查询。 【参考方案1】:

这样使用

@Entity
public class Organization
     @Column(name = "organization_id")
     private long organizationId;

     @ManyToMany(cascade = CascadeType.ALL)
     @JoinTable(name = "organization_members",
             joinColumns =  @JoinColumn(name = "organization_id") ,
             inverseJoinColumns =  @JoinColumn(name = "member_id") )
     private List<Member> organizationMembers= new ArrayList<Member>();


@Entity
public class Member
     @Column(name = "member_id")
     private long memberId;

在您的存储库中

@Query("SELECT m FROM Organization o JOIN o.organizationMembers m where o.organizationId = ?1")
Page<Members> getAllMembersByOrganization(long organizationId , Pageable pageable);

【讨论】:

以上是关于JPA - 对孩子列表进行分页的主要内容,如果未能解决你的问题,请参考以下文章

JPA分页查询与条件分页查询

如何添加到列表的链接以使用 spring-jpa 进行排序?

使用Spring Data JPA进行数据分页与排序

在Spring Boot中使用Spring-data-jpa实现分页查询(转)

Django如何对dicts列表进行分页

在JPA进行分页查询时,Query接口中的啥方法用于设定需要获取的总行数