9

나는 @Entity라는 사용자가 있습니다. 그것은 다음과 같이 변경 집합의 설정이 있습니다스프링 데이터 나머지 페이지 가능 하위 컬렉션

@Repository 
@RestResource(path = "users", rel = "users") 
public interface UserRepository extends JpaRepository<User, Long>{ } 

그리고 ChangesetRepository :

@Repository 
@RestResource(path = "changesets", rel = "changesets") 
public interface ChangesetRepository extends JpaRepository<Changeset, Long> { } 

호출 GET http://localhost:8080/changesets/ 또는 http://localhost:8080/users/가 페이징 응답을 얻을 수에

@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="user") 
private Set<Changeset> changesets = new HashSet<Changeset>(); 

나는 UserRepository 있습니다.

http://localhost:8080/users/1/changesets에서 GET을 호출하면 모든 결과가 단일 배열로 전달되고 페이징이 발생하지 않습니다.

스프링 데이터 나머지에게 부모 사용자를 통해 액세스 할 때 페이지 집합 방식으로 변경 집합 컬렉션을 반환하겠다는 뜻이 있습니까? 변경 집합은 빠르게 커질 것이며 단일 페이지에서 많은 결과를 반환하지 않을 것입니다.

편집 :

@RestResource(path = "byUser", rel = "byUser") 
public Page<Changeset> findByUser(@Param("id") User user, Pageable p); 

나는 관계 양방향 왼쪽뿐만 아니라에서 변경 집합에 대한 링크를 숨길 수 있었다 : 윌리 휠러에 의해 제안

내가 그것을 검색 할 수 있도록 내 ChangesetRepository이 추가 변경 집합에 @RestResource(exported=false)을 사용하여 사용자를 추가 할 수 있습니다.

사이드 노트 : exported = false로 설정하면 링크가 숨겨 지지만 실제로 매핑이 제거되지는 않습니다./users/1/changesets는 광고되지 않지만 여전히 유효합니다.

답변

8

SDR이 직접 설명한 접근 방식을 직접 지원한다고 생각하지 않습니다.

다른 접근법이 있습니다. PersonChangeset 사이에 양방향 관계를 사용하는 대신 Changeset에서 Person으로 단방향으로 지정하십시오. 그런 다음 ChangesetRepository이 같은 방법을 포함한다 : (. 난 그냥 메모리에서, 그래서 당신은 약간의 조정이 필요할 수 있다고하고있어)

@RestResource(path = "find-by-person") 
Page<Changeset> findByPerson(@Param("person") Person person, Pageable pageable); 

을 나는이 어쨌든 강한 생각 디자인 관점에서

, 나는 사람의 체인지 세트가 제한된 수의 맥락에서 관련이 있다고 상상하기 때문에. 변경 세트를 사람과 묶기보다는 쿼리하는 것이 더 적절할 수 있습니다.

+0

좋습니다. 나는 실제로 그것을 구현했고 그것은 꽤 좋다. 세부 정보를 사용하여 내 소식을 수정합니다. –

+0

답변을 수락합니다. 다른 사람들이 내가 원한 것을 가능하게하는 SDR 특정 설정으로 물마루를 찾았는지 확인하고 싶었습니다. –

+0

'List '대신 반환 값으로'Page '을 사용해야합니다. –

관련 문제