如何在Java Neo4j Cypher-DSL中实现动态标签的APOC查询?
用Java Cypher-DSL实现带动态标签的APOC查询
原需求是实现以下Neo4j查询,但直接拼接标签变量不符合Cypher语法规范:
WITH "Person" as label CALL apoc.cypher.run("MATCH (n) WHERE n:"+ label + " RETURN n",{}) YIELD value RETURN value
需要补全Cypher-DSL代码中的??部分,正确写法如下:
Cypher.with(Cypher.literalOf("Person").as("label")) .call( Cypher.literalOf("MATCH (n) WHERE n:$label RETURN n"), Cypher.mapOf("label", Cypher.name("label")) ) .yield("value") .returning("value") .build();
关键说明:
- 避免直接拼接变量到子查询字符串,改用APOC参数化查询,用
$label作为占位符,既符合语法要求,也能防止注入风险 Cypher.literalOf()用于构造APOC要执行的子查询语句- 参数映射
Cypher.mapOf("label", Cypher.name("label"))将外部定义的label变量传递给子查询的$label参数
生成的最终Cypher查询为:
WITH "Person" AS label CALL apoc.cypher.run("MATCH (n) WHERE n:$label RETURN n", {label: label}) YIELD value RETURN value
内容的提问来源于stack exchange,提问作者tuine
相关产品推荐
相关产品推荐

