복붙노트

[SPRING] Spring Data Rest 2.1에서 하위 페이지 매김 (Paginate)

SPRING

Spring Data Rest 2.1에서 하위 페이지 매김 (Paginate)

나는 기본 설정으로 Spring Data Rest 2.1.1 Release를 사용한다. 다음 리소스를 고려하십시오.

GET /communities/MyCommunity

{
    "creationDate": "2014-07-16T06:22:37.153+0000",
    "name": "GroupeSEB",
    "_links": {
        "self": {
            "href": "http://localhost:8080/api/communities/GroupeSEB"
        },
        "posts": {
            "href": "http://localhost:8080/api/communities/GroupeSEB/posts"
        }
    }
}

"posts"하위 리소스를 얻을 때 :

GET /communities/MyCommunity/posts

{
    "_embedded": {
        "posts": [
            {
                "creationDate": "2014-07-09T13:09:14.535+0000",
                "id": "53bd3efae4b012818368c549",
                "_links": {
                    "self": {
                        "href": "http://localhost:8080/api/posts/53bd3efae4b012818368c549"
                    } 
                }
            }
        ]
    }
}

페이지 매김을 사용할 수 없습니다. 내 상위 리소스가 대량의 게시물 (하위 리소스)을 집계 할 수 있으므로 모든 하위 리소스에 대해 페이지 매김을 사용하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.대답은 매우 간단합니다. 이론적 근거는 다음과 같습니다.

    대답은 매우 간단합니다. 이론적 근거는 다음과 같습니다.

    연관 자원은 1 차 개체와 하나 이상의 개체 간의 연관성을 나타냅니다. 따라서 이러한 리소스를 렌더링하기 위해 기본 엔터티를 조회하고 속성에 액세스합니다. 즉, 저장소 사용이 없으며 전체 메커니즘이 저장소에 영향을 미치지 않으므로 페이지 매김을 적용 할 수 없습니다. 엔티티 인스턴스에서 작동합니다. 연결이로드되는 방식은 상점별로 다릅니다.

    따라서 도메인 모델에 개체 연결이 이미있는 경우 저장소에서 연결을 처리하는 방식에 완전히 구속됩니다. 따라서 페이지 매김을 적용하더라도 처음부터 관련 객체를 모두 읽어야만 해당 ID를 얻을 수 있습니다.

    주위를 둘러싼 작업이 ID로만 돌아갈 수 있으며 해당 경로에서 리소스를 수동으로 노출 할 수 있습니다.이 리소스는 관련 엔터티의 리포지토리에서 ID 및 전용 쿼리 메서드를 사용합니다.

  2. ==============================

    2.올리버 (Oliver)의 대답은 완전히 정확하지 않습니다.

    올리버 (Oliver)의 대답은 완전히 정확하지 않습니다.

    EAGER 중첩 엔티티 (콜렉션)에서는 저장소 사용이 없다. 하지만 LAZY 중첩 엔티티 (컬렉션)에는 저장소 사용법이 있습니다. @ One2Many는 기본적으로 LAZY입니다. 따라서 상위 엔티티가 검색 될 때 중첩 엔티티가 채워지지 않으며 repo에서 검색되지 않습니다. 중첩 된 엔티티는 세션 내에서 액세스 될 때만 채워집니다. Spring 데이터에서 상위 엔티티의 REST 리스팅은 결코 중첩 엔티티에 액세스하지 않습니다. 중첩 된 엔티티 액세스 URL ie를 통해 중첩 된 LAZY 엔티티가 액세스 될 때. / communities / GroupeSEB / posts 는 중첩 된 객체가 액세스되고 중첩 된 객체가 객체 인스턴스가 아니기 때문에 리포에서 검색 할 객체의 LazyProxy입니다. 좋아, 중첩 된 개체 repo 레이어 캐시에서 repo 중 검색 할 수 있지만 중첩 된 엔터티 / 개체에 대한 캐시를 금지 할 수 있다고 생각합니다.

    따라서 LazyProxy 구현에서 페이징 정보를 전달 / 검색하는 방법이 있으면이 방법이 유용 할 수 있습니다.

    추신 @ One2Many와 @ Many2One 사이에서 양방향 탐색을하고 @ManyToOne (fetch = FetchType.LAZY)을 설정 한 다음 목록 노드에서 N + 1을 방지하고 repo 인터페이스에서 관련 findbyId () @NamedEntityGraph로 검색 할 때 EAGER로 중첩 된 @NamedEntityGraph. 이것은이 문제에 직접적으로 적용되지 않지만 봄 데이터 휴지 기간 동안 nesetd 엔티티의 검색이 제어 가능하다는 것을 입증합니다.

  3. from https://stackoverflow.com/questions/24775583/paginate-sub-resources-in-spring-data-rest-2-1 by cc-by-sa and MIT license