在Spring Data Neo4j 4中进行分页和排序

在SDN4中是否有对自定义查询的分页支持?

  • 如果是,它是如何工作的?
  • 如果不是,那还有工作吗?

我有以下Spring Data Neo4j 4存储库:

@Repository public interface TopicRepository extends GraphRepository,IAuthorityLookup { // other methods omitted @Query("MATCH (t:Topic)-[:HAS_OFFICER]->(u:User) " + "WHERE t.id = {0} " + "RETURN u") public Page topicOfficers(Long topicId, Pageable pageable); } 

和相应的测试用例:

 @Test public void itShouldReturnAllOfficersAsAPage() { Pageable pageable = new PageRequest(1,10); Page officers = topicRepository.topicOfficers(1L, pageable); assertNotNull(officers); } 

当我运行测试时,我遇到以下exception

 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 topics = topicRepository.findAll(pageable); assertNotNull(topics); } 

目前这是不可能的。

要启用此function,我们需要做一些事情。 首先在启动时,我们需要检查查询的关联方法签名,并将查询标记为需要分页。 然后在运行时调用方法时,我们需要获取可分页实例,提取页面参数并将它们作为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 topicOfficers(long topicId, long skip, long limit) 

现在允许在查询中使用SortPageable接口,并在DATAGRAPH-653中修复,并在版本4.2.0.M1标记为已修复(当前处于预发布状态)。

可以使用以下查询:

 @Query("MATCH (movie:Movie {title={0}})<-[:ACTS_IN]-(actor) RETURN actor") List getActorsThatActInMovieFromTitle(String movieTitle, Sort sort); 

和:

 @Query("MATCH (movie:Movie {title={0}})<-[:ACTS_IN]-(actor) RETURN actor") Page getActorsThatActInMovieFromTitle(String movieTitle, PageRequest page); 

来自Spring数据+ Neo4j文档中Cypher示例的示例

寻找Spring数据Neo4j预发布里程碑构建:

您可以在项目页面上查看任何版本的依赖项信息 。 对于4.2.0.M1构建,Gradle(您可以推断Maven)的信息是:

 dependencies { compile 'org.springframework.data:spring-data-neo4j:4.2.0.M1' } repositories { maven { url 'https://repo.spring.io/libs-milestone' } } 

应该使用任何较新的最终版本。