spring-data-neo4j: @Query с глубиной

Я использую spring-data-neo4jv4.2.8, у меня есть NodeEntity с 2 EntityRelationship один для входящих, другой для исходящих.

Я хочу загрузить узлы с определенным фильтром, используя метод репозитория @Query. Все отношения должны быть загружены узлом. Это мой запрос

@Query(value = "MATCH (n:`Person`) WHERE {0} IN labels(n) RETURN n")
Iterable<Person> findAllByLabels(String label);

=> Я загружаю узлы с двумя метками Person и конкретный ярлык.

Я перепробовал много вещей:

  1. используя @depth в методе
  2. указав отношения в запросе, как это.

    @Query(value = "MATCH (n:`Person`)<-[r]-() WHERE {0} IN labels(n) RETURN n")
    Iterable<Person> findAllByLabels(String label);
    

    В этом случае загружаются только узлы со связями, и с этим возникают другие проблемы.

Какую альтернативу я должен сделать эту работу.

Спасибо.

2 ответа

Это решение, которое я нашел до сих пор

@Query(value = "MATCH (n:`Person`) WHERE {0} IN labels(n) MATCH (n1:`Person`)<-[r1]-(n2:`Person`) WHERE {0} IN labels(n1) RETURN n,n1,n2,r1")

С помощью ниже вы можете вернуть каждый узел, даже если он не имеет отношения.

@Query(value = "MATCH (n:`Person`) WHERE {0} IN labels(n)"
      + " OPTIONAL MATCH path=(n:`Person`)<-[r]-()"
      + " RETURN CASE path WHEN null THEN n ELSE path END")
  Iterable<Person> findAllByLabels(String label);

Только отношения доступны в Person класс будет отображен.

Другие вопросы по тегам