spring-data-neo4j:@深度查询

时间:2018-08-15 10:31:49

标签: neo4j cypher spring-data-neo4j spring-data-neo4j-4

我正在使用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和一个特定标签的节点。

我尝试了很多事情:

  1. 在方法中使用@depth
  2. 像这样指定查询中的关系。

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

    在这种情况下,仅加载具有关系的节点,并且还有其他问题。

我必须采取什么替代措施。

谢谢。

2 个答案:

答案 0 :(得分:0)

这是我到目前为止找到的解决方案

@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")

答案 1 :(得分:0)

在下面,即使没有关系,您也可以返回每个节点。

@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类中可用的关系。