我们有一个结构,其中父可以有多个具有嵌套结构的子。
1: Parent p1
child c1
c1.1
c1.2
child c2
c2.1
c2.3
现在使用一个密码查询,我需要使用Spring + Neo 4j来获取整个结构。
型号:
人:
@Relationship( direction = Relationship.OUTGOING, type = "PARENT")
private Person parent;
@Relationship( direction = Relationship.INCOMING, type = "PARENT")
private List<Person> child;
Cypher查询: -
MATCH (p:Person {name:"john"})<-[pr:PARENT*..2]-(p1:Person) return c1
只给我一个孩子而不是他们的下一个孩子
MATCH (p:Person {name:"john"})<-[pr:PARENT*..2]-(p1:Person) return pr
给我一个递归的嵌套结构,没用。
方法: - repository.findOne(personId,2);
我遇到了与扩展子结构时相同的问题,它有一个父对象的引用
例如: -
父p1子c1 - &gt;三个对象
1: child-p1 --- it would have a reference to Parent Object p1
2: c1.1 ---
child --it would reference to Child C1 since its parent
3: c1.2
child --it would reference to Child C1 since its parent
理想情况下,它不应包含子列表中Parent的任何引用,从而导致堆栈溢出问题。
我正在使用SDN 4.0.release
答案 0 :(得分:0)
实现此目的的一种方法是使用自定义深度加载实体,如下所示 -
repository.findOne(personId, 2);
其中2是深度。
如果您使用的是SDN 4.0,那么您的Cypher查询在这种情况下不会有太大用处,实体不会从查询结果中映射。
如果您使用SDN 4.1,那么您可以从路径返回所有节点和关系,并且您的域实体将被正确映射。 例如:
MATCH path=(p:Person {name:"john"})<-[pr:PARENT*..2]-(p1:Person) return p as person, nodes(path),rels(path)
如果您使用Neo4jTemplate.query
执行此操作,则会收到一个org.neo4j.ogm.model.Result
,其中包含此人,并根据您匹配的路径提供关系。