Neo4j 用 neo4j-jdbc 删除节点 属性

Neo4j delete a node property with neo4j-jdbc

我有一条具有多种特性的优势。我想保留边缘但只删除名称 属性.

我的 java Cypher 是这样的:

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

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

我收到这个错误:

processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [MATCH ()-[r]->() where id(r) = {1} REMOVE r.{2} RETURN r]; SQL state [null]; error code [0]; Some errors occurred : [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";

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

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

  • 标签
  • 关系类型
  • 属性

如果你想在Cypher中实现,APOC插件中有很多帮手。