为什么neo4j递归获取?

时间:2015-02-25 13:29:34

标签: neo4j spring-data-neo4j

我有一个名为PracticeArea的节点,可以有一个父练习区和儿童练习区。

当我拉出一个特定的练习区域时,我希望它能为我带来父节点及其子节点的特定节点。但是,neo也给了我所有孩子的父母,父母和孩子的孩子,简而言之,加载了整个图表。

无论是使用Spring Data neo4j存储库,自定义查询还是neo4jTemplate,我都得到相同的结果。

interface PracticeAreaGenericRepository extends GraphRepository<PracticeArea> {

@Query("MATCH (n:PracticeArea {practice_area_id:{0}})-[HAS_CHILDREN_PRACTICE_AREA*1]->(c) MATCH (n)-[HAS_PARENT_PRACTICE_AREA*1]->(p) RETURN n, p")
PracticeAreaData findByPracticeArea(String uuid);
}

PracticeAreaData.java

@QueryResult
public class PracticeAreaData {

@ResultColumn("n")
PracticeArea node;

@ResultColumn("p")
PracticeArea parent;

/* Getters & Setters */


}

请说明哪里出错..谢谢

1 个答案:

答案 0 :(得分:1)

您的查询缺少一个关键部分,WITH将两者连接在一起,并将n从第一部分传递到第二部分。如果没有它,您只需找到具有父练习区和所有父练习区的所有节点。

MATCH (n:PracticeArea {practice_area_id:{0}})-[HAS_CHILDREN_PRACTICE_AREA*..1]->(c)
WITH n
LIMIT 1
MATCH n-[HAS_PARENT_PRACTICE_AREA*..1]->(p)
RETURN n, p