【问题标题】:How do I return multiple objects with Neo4j and spring data?如何使用 Neo4j 和 spring 数据返回多个对象?
【发布时间】:2015-07-08 19:10:10
【问题描述】:

我正在尝试使用此查询在计算字段旁边返回一个节点对象。理论上,这应该返回一个哈希值,我可以访问每个人并计算和管道到速度模板。

MATCH (starter:Person {userId: {0}})<-[r:WORKS_FOR]-(n:Person) OPTIONAL MATCH (n)<-[q:WORKS_FOR]-(p:Person) RETURN {person: n, reporteeCount: count(q)}

我可以在 Neo4j 浏览器中返回值,但未能正确引用返回类型并在 spring-boot 中访问 Java 中的数据。

我们当前的配置是使用 PersonRepository 访问数据,然后使用 PersonService 和 PersonServiceImpl 将返回的数据从 Neo4j 传递到我们的 PersonController。

【问题讨论】:

    标签: java spring neo4j spring-boot spring-data-neo4j


    【解决方案1】:

    我认为你想要的是一个带 @QueryResult 注释的 DTO 来获取你的人 + reporteeCount

    @QueryResult 
    class PersonWithHash {
       Person person;
       int reporteeCount;
    }
    
    // in PersonRepository
      @Query("MATCH (starter:Person {userId: {0}})<-[r:WORKS_FOR]-(n:Person) OPTIONAL MATCH (n)<-[q:WORKS_FOR]-(p:Person) RETURN n as person, count(q) as reporteeCount")
      Collection<PersonWithHash> findBy...(String userId);
    

    注意查询RETURN子句的变化

    【讨论】:

    • 这似乎不太可行。它返回一个有效的对象,但里面的数据似乎是空的。
    • 我不得不用结果列的名称对字段进行注释,以使其加载查询结果。即使变量名称与返回中的名称相同
    • @MichaelHunger -- 我与 Ian 一起从事开源项目(企业的一切目录)。他忘了提到我们使用的是 SpringData Neo4j 版本 4.0.0.M1。文档说@QueryResult is not yet implemented
    • 抱歉,那你可能会使用 template.query 来返回一个可迭代的地图
    • 我尝试过相同类型的查询 @Query("MATCH (bank:Bank {name:{0}})-[:EMPLOY]->(employee:Employee) RETURN bank.name as bankName , employee.name as employeeName"),但是我得到一个异常:线程“main”中的异常 java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.springframework.data.neo4j.repository .config.EnableNeo4jRepositories.repositoryBaseClass()
    猜你喜欢
    • 1970-01-01
    • 2021-04-16
    • 2020-11-23
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多