You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Neo4j传递节点属性为参数遇Cypher语法错误求解决

解决Spring Neo4j动态传参的语法错误问题

错误原因

你在Cypher语句里的参数写法不符合Spring Data Neo4j的规范,把参数占位符{id}直接嵌套在了节点属性的大括号里,导致Neo4j解析Cypher时识别为无效语法。

解决方案

将Cypher语句中的参数引用改为**$参数名**的形式,这是Spring Data Neo4j兼容Cypher原生的参数传递语法,同时保持Repository方法的@Param注解与参数名对应即可。

修改后的查询语句

String get_interest="MATCH(user:User{id: $id})-[watched:WATCHED]->(movie:Movie{title: $title}) " +
        "MATCH(movie)-[:BELONGS_TO]->(category:Category) " +
        "MATCH(category)<-[:BELONGS_TO]-(similarMovie:Movie) " +
        "WHERE NOT EXISTS((user) -[:WATCHED]->(similarMovie))" +
        "RETURN similarMovie Limit 20";

保持原Repository方法不变

@Query(get_interest)
Collection<Movie> getMovieByInterest(@Param("id") String id,
                                     @Param("title") String title);

补充说明

  • 旧版本的Spring Data Neo4j可能支持{参数名}的写法,但在节点属性的大括号内部使用时会产生语法冲突,改用$参数名是更通用且符合Cypher标准的写法
  • 这样修改后,参数会被Spring正确绑定并传递给Neo4j,既能避免硬编码值,又能保证语法合法

内容的提问来源于stack exchange,提问作者sami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:46:10