spring-data-neo4j: @Query с глубиной
Я использую spring-data-neo4j
v4.2.8
, у меня есть NodeEntity
с 2 EntityRelationship
один для входящих, другой для исходящих.
Я хочу загрузить узлы с определенным фильтром, используя метод репозитория @Query. Все отношения должны быть загружены узлом. Это мой запрос
@Query(value = "MATCH (n:`Person`) WHERE {0} IN labels(n) RETURN n")
Iterable<Person> findAllByLabels(String label);
=> Я загружаю узлы с двумя метками Person
и конкретный ярлык.
Я перепробовал много вещей:
- используя @depth в методе
указав отношения в запросе, как это.
@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
класс будет отображен.