[SPRING] 중첩 된 리소스에 대한 스프링 데이터 나머지의 페이지 매김
SPRING중첩 된 리소스에 대한 스프링 데이터 나머지의 페이지 매김
아래 URL을 방문하면 응답으로 페이지 매김을 얻습니다.
/api/userPosts/
{
"_links" : {
"self" : {
"href" : "/api/userPosts{?page,size,sort}",
"templated" : true
},
"next" : {
"href" : api/userPosts?page=1&size=20{&sort}",
"templated" : true
}
},
"_embedded" : {
"userPosts" : [ {
...
그러나 다음 URL을 방문 할 때 Spring Data REST의 페이지 매김이 없습니다.
/api/users/4/userPosts
{
"_embedded" : {
"userPosts" : [ {
UserRepository와 UserPostRepository는 페이지 매김이있는 JPARepository입니다. 결과적으로 두 번째 URL은 반환되는 결과의 행 수가 너무 많기 때문에 GC 오버 헤드를 초과 한 오류를 발생시킵니다.
@RepositoryRestResource(excerptProjection = UserProjection.class)
public interface UserRepository extends BaseRepository<User, Integer>, UserRepositoryCustom {
}
public interface UserPostRepository extends BaseRepository<UserPost, Long> {
}
@NoRepositoryBean
public interface BaseRepository<T, N extends Serializable> extends JpaRepository<T, N>, QueryDslPredicateExecutor<T> {
}
두 번째 URL을 사용하여 페이지 매김을 수행하는 방법은 무엇입니까?
해결법
-
==============================
1.짧은 고통스러운 대답 : 아니. 당연하지.
짧은 고통스러운 대답 : 아니. 당연하지.
길고 고통스러운 답변 : 예. Spring Data, JPA, Hibernate의 큰 섹션을 다시 작성함으로써. 문제의 핵심은 중첩 된 엔터티 (컬렉션이든 아니든)를 요청할 때 중첩 된 엔터티가 리포지토리의 쿼리가 아니라는 것입니다. 그러나 is는 엔티티에서 반환됩니다. 페이징을위한 Spring Data / JPA에는 아무런 메커니즘이 없다.
Spring REST에서 what / api / users / 4 / user Post 요청은 기본적으로 다음과 같습니다.
User user = userRepository.findOne(4); return user.userPosts;
따라서 user.userPosts를 검색하는 것은 중첩 된 엔티티에 대한 Eager 또는 Lazy 참조이며이를 호출 할 방법이 없습니다.
이를 달성하는 가장 쉽고 유일한 해결책은 다음과 같습니다. 1. Spring 데이터 검색 쿼리 생성 : UserPostRepository.findByUserId (Long ID, Pagination pa) 2. 맵핑을위한 커스텀 스프링 MVC 컨트롤러를 만든다.
@Get("/api/users/{id}/userPosts") public Page<UserPost> getUserPostsByUserId(Long id, Pagination pagi) { return userPostRepository.findByUserId(id, pagi);
from https://stackoverflow.com/questions/26451920/pagination-in-spring-data-rest-for-nested-resources by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Boot를 2.1.1에서 2.1.2로 업그레이드 할 때 오류가 발생했습니다. (0) | 2019.05.22 |
---|---|
[SPRING] 작업 제출 후 ClassNotFoundException (0) | 2019.05.22 |
[SPRING] NoSuchMethodError의 종속성 오류 결과 : PersistenceUnitInfo.getSharedCacheMode () Ljavax / persistence / SharedCacheMode; (0) | 2019.05.22 |
[SPRING] 프로그래밍 방식으로 스프링 빈에 값 전달하기? (0) | 2019.05.22 |
[SPRING] @Autowired 객체가 null 인 이유는 무엇입니까? (0) | 2019.05.22 |