Neo4j 使用 neo4j-jdbc 删除节点属性



我有一个带有sevral属性的优势。我想保留边缘,但只删除名称属性。

我的java密码是这样的:

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

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

我收到此错误:

处理失败; 嵌套异常是 org.springframework.jdbc.UnclassificationdSQLException: PreparedStatementCallback; unclassificationd SQLException for SQL [MATCH ((-[r]->(( 其中 id(r( = {1} REMOVE r.{2} RETURN r];SQL 状态 [空];错误代码 [0];发生一些错误: [Neo.ClientError.Statement.SyntaxError]:输入无效 '{':需要标识符、空格、函数名称或属性键名称(第 1 行,第 45 列(偏移量:44(( "MATCH ((-[r]->(( 其中 id(r( = {1} REMOVE r.{2} RETURN r" `

有什么建议吗?

谢谢

编辑

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

溶液: 爪哇岛:

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插件中有很多帮助程序。

最新更新