0

親がネストされた構造を持つ複数の子を持つことができる構造があります。

1: Parent p1
    child c1
          c1.1       
          c1.2
   child  c2
          c2.1
          c2.3

1 つのサイファー クエリを使用して、Spring + Neo 4j を使用して全体の構造を取得する必要があります。

モデル:

人:

@Relationship( direction = Relationship.OUTGOING, type = "PARENT")
private Person parent;

@Relationship( direction = Relationship.INCOMING, type = "PARENT")
private List<Person> child;

暗号クエリ:-

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);

親オブジェクトの参照が1つある子構造を展開するときと同じ問題が発生しています

例:-

親 p1 子 c1 -- > 3 つのオブジェクト

  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

理想的には、子リストに親の参照が含まれていて、スタック オーバー フローの問題が発生しないようにする必要があります。

SDN 4.0.release を使用しています

4

1 に答える 1

0

これを行う 1 つの方法は、次のようにカスタムの深さでエンティティを読み込むことです。

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

于 2016-03-03T06:53:03.803 に答える