2016-03-02 2 views
0

У нас есть структура, в которой родитель может иметь несколько дочерних элементов с вложенной структурой.Neo4j - Родитель - дочерняя иерархия + Весна

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

Теперь, используя один запрос cypher, мне нужно получить всю структуру, используя 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 

дает мне вложенная структура w он рекурсивный, что бесполезно.

Подход: - repository.findOne (personId, 2);

Я получаю те же проблемы, когда мы расширим структуру ребенка он имеет одну ссылку на родительский объект

Для например: -

Parent p1 ребенка c1 -> три объекта

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

ответ

0

Один из способов сделать это загрузить объект с настраиваемой глубиной, как this-

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, который будет содержать человек, увлажненный с отношениями с путем вы сопрягать.

 Смежные вопросы

  • Нет связанных вопросов^_^