java - Spring Data Neo4j 4 中的分页和排序

标签 java spring neo4j spring-data-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);
}

最佳答案

现在允许在您的查询中使用 SortPageable 接口(interface),并已在 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 Examples 的样本)

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

您可以查看 dependencies information for any release在项目页面上。对于 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'
    }
}

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

关于java - Spring Data Neo4j 4 中的分页和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30624435/

相关文章:

java - 不能从静态内容中引用非静态方法

java - Android - 保存到文本文件

java - 如何使用 JSR 223 保护脚本安全?

java - Spring 中带有 url 模式重定向的上下文路径

Neo4j慢创建方法

java - 在 Swing 中将 StyleConstants.setFirstLineIndent 设置为负数后文本模糊

java - Spring Boot应用程序未与Cloud Config Server连接

java - 将 owl 文件映射到 neo4j - getOrCreateNodeWithUniqueFactory 方法

python - 无法获取与 Neo4j 数据库的连接

Spring Boot Thymeleaf 布局方言不起作用