首页 > 解决方案 > Neo4j 使用 neo4j-jdbc 删除节点属性

问题描述

我有几个属性的优势。我想保持优势,但只删除 name 属性。

我的 java Cypher 是这样的:

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

它适用于密码控制台,但不适用于 jdbc。

我收到了这个错误:

处理失败;嵌套异常是 org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; SQL [MATCH ()-[r]->() 的未分类 SQLException 其中 id(r) = {1} REMOVE r.{2} RETURN r]; SQL 状态 [null]; 错误代码[0];发生一些错误:[Neo.ClientError.Statement.SyntaxError]:Invalid input '{': expected an identifier, whitespace, a function name or a property key name (line 1, column 45 (offset: 44)) "MATCH () -[r]->() where id(r) = {1} REMOVE r.{2} RETURN r" `

有什么建议么?

谢谢

编辑

我无法使用 jdbc 模板。所以我使用了字符串替换:将属性设置为 NULL 将删除该属性(http://www.baeldung.com/java-neo4j

解决方案:Java:

String deleteQuery = String.format(DELETE_EDGE_PROPERTY_QUERY, property);
plantJdbcTemplate.update(deleteQuery, edgeId);

密码:

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

标签: neo4jcypherjdbctemplateneo4j-java-api

解决方案


这不是neo4j-jdbc问题,它与 Neo4j 关于参数化查询的设计有关。

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

  • 标签
  • 关系类型
  • 特性

如果你想在 Cypher 中做,APOC 插件中有很多助手。


推荐阅读