Neo4j使用Neo4j jdbc删除节点属性

Neo4j使用Neo4j jdbc删除节点属性,neo4j,cypher,jdbctemplate,neo4j-java-api,Neo4j,Cypher,Jdbctemplate,Neo4j Java Api,我在很多方面都有优势。我想保留边缘,但只删除name属性 我的java密码是: public static final String DELETE_EDGE_PROPERTY_QUERY = // "MATCH ()-[r]->() where id(r) = {1} REMOVE r.{2} RETURN r"; // 它在cypher控制台上工作,但在jdbc上不工作 我得到了这个错误: 处理失败;嵌套异常为org.springframework.jdbc.Uncat

我在很多方面都有优势。我想保留边缘,但只删除name属性

我的java密码是:

public static final String DELETE_EDGE_PROPERTY_QUERY = //
        "MATCH ()-[r]->() where id(r) = {1} REMOVE r.{2} RETURN r"; //
它在cypher控制台上工作,但在jdbc上不工作

我得到了这个错误:

处理失败;嵌套异常为org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback;SQL[MATCH()-[r]->()的未分类SQLException,其中id(r)={1}删除r.{2}返回r];SQL状态[null];错误代码[0];出现了一些错误: [Neo.ClientError.Statement.SyntaxError]:无效输入“{”:需要标识符、空格、函数名或属性键名(第1行第45列(偏移量:44)) “匹配()-[r]->(),其中id(r)={1}删除r.{2}返回r” `

有什么建议吗

谢谢

编辑

我无法使用jdbc模板。 所以我使用了字符串替换: 将属性设置为NULL将删除该属性 ()

解决方案: 爪哇:

密码:

public static final String DELETE_EDGE_PROPERTY_QUERY = //
        "MATCH ()-[r]->() where id(r) = {1} SET r.%s = NULL RETURN r";

这不是一个
neo4jjdbc
问题,它与neo4j关于参数化查询的设计有关

在查询中,您可以参数化所需的所有数据,除了:

  • 标签
  • 关系类型
  • 性质

如果你想用Cypher来做,APOC插件中有很多帮助程序。

你可能需要使用属性名,比如
{:id}
,而不是索引。嘿,RP,谢谢你的回复。你确定吗?我想删除属性本身,而不是它的值。例如:Edge(name=blablabla,date=1981,degree=5)Hre我想删除name而不是blabla我想应该是这样的
MATCH()-[r]->(),其中id(r)={:id}删除r.name返回r
确实是这样,但是这里name也应该是一个参数{:name}作为属性传递。我想能够删除任何属性(名称、值、程度、年龄等)RP,我终于选择了字符串替换,这似乎很有效。谢谢。我已经编辑了我的原始帖子来添加解决方案
public static final String DELETE_EDGE_PROPERTY_QUERY = //
        "MATCH ()-[r]->() where id(r) = {1} SET r.%s = NULL RETURN r";