一尘不染

Spring Data JPA。儿童实体分页

spring-boot

我正在将Spring Data JPA与Spring引导版本1.3.6.RELEASE与内存数据库一起使用。

我想知道如何从父实体 对子实体 进行 分页 。对我来说,将抓取设置为 LAZY 并不是解决方案。

这是用例:

  1. 级与子级 实体 具有 单向的“ 一对多”关系。 __
  2. 一位 家长孩子 数量可以达到100,000(LAZY不是解决方案) __
  3. 我不想获取所有孩子进行分页(出于CPU和内存的原因)

这是一个代码示例:

@Entity
public class Parent{
    @Id
    private Integer id;

    @OneToMany
    private List<Child> childs;
}

@Entity
public class Child {
    @Id
    private Integer id;
}

public interface ParentRepository extends JpaRepository<Parent, Integer>{}
public interface ChildRepository extends JpaRepository<Child, Integer>{}

我在父存储库中尝试了此失败:

Page<Child> findById(int id, Pageable pageable);

这将返回父实体,而不是子实体。

任何想法如何做到这一点?


阅读 233

收藏
2020-05-30

共1个答案

一尘不染

这是一个代码示例,可以获取知道父级的子级实体。请注意,此查询将返回分页的Child结果。

 /**
  * Find Child entities knowing the Parent.
  */
  @Query("select child from Parent p inner join p.childs child where p = :parent")
  public Page<Child> findBy(@Param("parent") Parent parent, Pageable pageable);

您可以像这样使用它:

Page<Child> findBy = repo.findBy(parent, new PageRequest(page, size));
2020-05-30