如何在 spring 数据 neo4j 中传递关系查询参数

how to pass relationship query parameter in spring data neo4j

returns 以下注释出错。

@Query(value ="MATCH (n:Phone {phoneId:{0}})-[f:calling*0..{1}]-(m) OPTIONAL MATCH (m)-[r]-() return m,r")  
List<QueryPOJO> graph(String name,int level);

说明:参数映射不能用于 MATCH 模式(改用文字映射,例如“{id: {param}.id}”)(第 1 行,第 45 列(偏移量:44))

我们需要一个优雅的方法来解决这个问题,而不是写很多接口。

   @Query(value ="MATCH (n:Phone {phoneId:{0}})-[f:calling*0..2]-(m) 
   OPTIONAL MATCH (m)-[r]-() return m,r")  
   List<QueryPOJO> grapht_2(String name,int level);

   @Query(value ="MATCH (n:Phone {phoneId:{0}})-[f:calling*0..3]-(m) 
   OPTIONAL MATCH (m)-[r]-() return m,r")  
   List<QueryPOJO> grapht_3(String name,int level);

密码无法解决等级关系问题。

   MATCH (n:Person {name:'AAA'})-[f]-(m) where type(f)="Follow" OPTIONAL MATCH (m)-[r]-() return m,r

您可能需要求助于"manually"将 Cypher 语句构造为字符串并通过会话执行它,这允许通过其查询、queryForObject 和 queryForObjects 方法执行任意 Cypher 查询。

Cypher 不支持像你这样的关系限制 did.You 可以尝试使用函数 length() 来限制路径的长度,如下所示:

MATCH p=(n:Phone {phoneId:{0}})-[f:calling]-(m) OPTIONAL MATCH (m)-[r]-() where length(p)<{1} return m,r

函数length() 获取路径的长度。参考 this,#Path Functions.