[SPRING] Spring 데이터 Neo4j 4에서 페이징 및 정렬
SPRINGSpring 데이터 Neo4j 4에서 페이징 및 정렬
SDN4의 맞춤 검색어에 대한 페이지 매김 지원이 있습니까?
다음 Spring Data Neo4j 4 저장소가 있습니다.
@Repository
public interface TopicRepository
extends GraphRepository<Topic>,IAuthorityLookup {
// other methods omitted
@Query("MATCH (t:Topic)-[:HAS_OFFICER]->(u:User) "
+ "WHERE t.id = {0} "
+ "RETURN u")
public Page<User> topicOfficers(Long topicId, Pageable pageable);
}
그리고 해당하는 테스트 케이스 :
@Test
public void itShouldReturnAllOfficersAsAPage() {
Pageable pageable = new PageRequest(1,10);
Page<User> officers = topicRepository.topicOfficers(1L, pageable);
assertNotNull(officers);
}
테스트를 실행하면 다음과 같은 예외가 발생합니다.
Failed to convert from type java.util.ArrayList<?> to type org.springframework.data.domain.Page<?> for value '[org.lecture.model.User@1]';
nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.util.ArrayList<?> to type org.springframework.data.domain.Page<?>
이것은 내 설정입니다.
dependencies {
//other dependencies omitted
compile("org.neo4j:neo4j-cypher-dsl:2.0.1")
compile "org.neo4j.app:neo4j-server:2.2.2"
compile(group: 'org.springframework.data',
name: 'spring-data-neo4j',
version: '4.0.0.BUILD-SNAPSHOT')
compile(group: 'org.springframework.data',
name: 'spring-data-neo4j',
version: '4.0.0.BUILD-SNAPSHOT',
classifier: 'tests')
testCompile(group: 'org.neo4j',
name: 'neo4j-kernel',
version: '2.2.2',
classifier: 'tests')
testCompile(group: 'org.neo4j.app',
name: 'neo4j-server',
version: '2.2.2',
classifier: 'tests')
testCompile(group: 'org.neo4j',
name: 'neo4j-io',
version: '2.2.2',
classifier: 'tests')
}
다음 테스트가 잘 실행되므로 스냅 샷에서 페이지 매김을 처리 할 수 있어야합니다.
@Test
public void itShouldReturnAllTopicsAsAPage() {
Pageable pageable = new PageRequest(1,10);
Page<Topic> topics = topicRepository.findAll(pageable);
assertNotNull(topics);
}
해결법
-
==============================
1.현재로서는 이것이 불가능합니다.
현재로서는 이것이 불가능합니다.
이 기능을 사용하려면 몇 가지 작업을 수행해야합니다. 처음 시작할 때 쿼리의 연관된 메서드 서명을 검사하고 쿼리가 페이징을 요구하는 것으로 표시해야합니다. 그런 다음 런타임에 메소드가 호출 될 때 페이지 가능 인스턴스를 얻고 페이지 매개 변수를 추출하여 SKIP 및 LIMIT 절로 관련 Cypher 쿼리에 적용해야합니다. 마지막으로 반환 할 때 결과를 Page 객체로 래핑해야합니다. 그래서 이것을 가능하게하기 위해해야할 일이 있습니다.
그 동안 매개 변수화 된 값이있는 SKIP 및 LIMIT 절을 쿼리에 추가하고 via의 적절한 값을 쿼리 메서드에 전달할 수 있습니다. 나는 이것을 시도하지 않았지만 이론적으로는 효과가있다.
@Query("MATCH (t:Topic)-[:HAS_OFFICER]->(u:User) " + "WHERE t.id = {0} " + "RETURN u SKIP {1} LIMIT {2}" ) public List<User> topicOfficers(long topicId, long skip, long limit)
-
==============================
2.이제 쿼리에서 Sort 또는 Pageable 인터페이스를 사용하여 허용되며 DATAGRAPH-653에서 수정되었으며 버전 4.2.0.M1 (현재 시험판)에서 수정 됨으로 표시되었습니다.
이제 쿼리에서 Sort 또는 Pageable 인터페이스를 사용하여 허용되며 DATAGRAPH-653에서 수정되었으며 버전 4.2.0.M1 (현재 시험판)에서 수정 됨으로 표시되었습니다.
다음과 같은 쿼리가 가능합니다.
@Query("MATCH (movie:Movie {title={0}})<-[:ACTS_IN]-(actor) RETURN actor") List<Actor> getActorsThatActInMovieFromTitle(String movieTitle, Sort sort);
과:
@Query("MATCH (movie:Movie {title={0}})<-[:ACTS_IN]-(actor) RETURN actor") Page<Actor> getActorsThatActInMovieFromTitle(String movieTitle, PageRequest page);
(Spring Data + Neo4j 문서의 Cypher 예제 샘플)
프로젝트 페이지의 모든 릴리스에 대한 종속성 정보를 볼 수 있습니다. 그리고 4.2.0.M1 빌드에서 Maven을 추론 할 수있는 Gradle에 대한 정보는 다음과 같습니다.
dependencies { compile 'org.springframework.data:spring-data-neo4j:4.2.0.M1' } repositories { maven { url 'https://repo.spring.io/libs-milestone' } }
대신 최신 릴리스를 사용해야합니다.
from https://stackoverflow.com/questions/30624435/paging-and-sorting-in-spring-data-neo4j-4 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 테스트 할 때 데이터 소스로 봄 부팅 (0) | 2019.02.18 |
---|---|
[SPRING] 스프링 빈을 서블릿에로드한다. (0) | 2019.02.18 |
[SPRING] Spring Data Mongo로 여러 MongoDB 저장소 구성 (0) | 2019.02.18 |
[SPRING] Set 컬렉션의 객체 바인딩 (0) | 2019.02.18 |
[SPRING] Spring 바인딩 <Object> to Form : 체크 박스 (0) | 2019.02.18 |