2016-08-28 6 views
2

스프링 내장 JPA와 스프링 내장 버전 1.3.6.RELEASE를 메모리 내장 데이터베이스와 함께 사용하고 있습니다.스프링 데이터 JPA. 하위 엔티티에 대한 페이지 매기기

부모 엔티티에서 하위 엔티티의 페이지 매김을하는 것이 궁금합니다. 가져 오기를 LAZY으로 설정하는 것은 해결책이 아닙니다. 아이엔티티와 단방향 oneToMany 관계를 갖는다

  1. 상위 : 여기서

    은 사용 케이스이다.
  2. 하나 부모에 대한 아이의 수는
  3. 내가 (CPU 및 메모리의 이유로) 페이지 매김을 할 모든 자식을 가져하지 않으려는
  4. (LAZY는 해결책이 아니다) 10 만에 도달 할 수 있습니다

    : 나는 실패 부모 저장소에이 작업을 시도했습니다

    @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); 

이렇게하면 하위 항목이 아닌 상위 항목이 반환됩니다.

어떻게하면 좋을까요?

+2

글쎄, 당신은 아이 엔티티를 찾고 있기 때문에, 그 방법은 ChildRepository에 있어야하고,이 findByParent 이름을 지정해야합니다, 반환 아이들 주어진 부모 엔티티와 관련된. ''부모 선택 p.children child p = : parent'에서''자식 선택 '과 같은 것입니다. –

+0

관계가 단방향 일지라도 작동합니까? 나는 그것을 시도 할 것이다. – nono

+0

같은 문제는 행운없이 해결하려고합니다. 문제를 풀 수 있다면 질문에 대답 할 수 있습니다. [관련 질문] (https://stackoverflow.com/questions/31582224/how-to-get-paginated-child-lists-from-onetomany-unidrectional-parent-using-findb) –

답변

0

다음은 상위 항목을 인식하는 하위 항목을 가져올 수있는 코드 샘플입니다. 이 쿼리는 하위의 페이지 된 결과를 반환합니다.

/** 
    * 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)); 
관련 문제