对于此用例,您必须返回ID(人物)并使用 repository.findOne 要么 neo4jOperations.load 代替。
repository.findOne
neo4jOperations.load
正如Luanne建议的那样,你现在需要分两步完成。对于存储库方法,您可以尝试这样的事情:
@Query("MATCH (p:Person)-[rel]->(node) WHERE p.firstName = {firstName} RETURN DISTINCT p ORDER BY COUNT(rel)") Iterable<Person> findSomething(@Param("firstName") String firstName);
这应该归还 Person 你想要的实体按正确的顺序排列,虽然我很欣赏实际的计数不会被映射,所以你不得不发出第二个查询来查找计数。
Person
如果你不需要实际的 Person 实体,而只是这些节点的一些属性,然后解决方法可能是映射到a @QueryResult 反而是对象。像这样的东西:
@QueryResult
@Query("MATCH (p:Person)-[rel]->(node) WHERE p.firstName = {firstName} RETURN DISTINCT p.firstName, p.surname, p.dateOfBirth, COUNT(rel) AS rank ORDER BY rank") Iterable<PersonQueryResult> findSomething(@Param("firstName") String firstName);
...哪里 PersonQueryResult 是一个注释的POJO @QueryResult 与setter / getters对应的查询返回子句中列出的属性。
PersonQueryResult