Spring Data JPA。子实体的分页

时间:2016-08-28 14:02:43

标签: java jpa spring-boot spring-data one-to-many

我使用Spring Data JPA和Spring启动版本1.3.6.RELEASE与内存数据库。

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

以下是用例:

  1. 与Child 实体具有单向 oneToMany关系。
  2. 一个 Parent Child 的数量可以达到100,000(LAZY不是解决方案)
  3. 我不想让所有的孩子去做分页(因为CPU和内存的原因)
  4. 以下是代码示例:

    @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>{}
    

    我在Parent资源库中尝试过这种方法失败了:

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

    这将返回Parent实体,而不是Child实体。

    知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

假设父母被称为“父母”,您还可以执行以下操作:

repo.findAllByParent(parent, pageable);

答案 1 :(得分:0)

以下是可以获取知道父级的子实体的代码示例。 请注意,此查询将返回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));