Neo4j使用neo4j-jdbc

时间:2018-05-24 21:12:02

标签: neo4j cypher jdbctemplate neo4j-java-api

我有一个具有多种属性的优势。我想保留优势,但只删除名称属性。

我的java Cypher是这样的:

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的SQLException [MATCH() - [r] - >()其中id(r)= {1} REMOVE r。{2} RETURN r]; SQL状态[null];错误代码[0];发生了一些错误:   [Neo.ClientError.Statement.SyntaxError]:无效输入'{':预期标识符,空格,函数名称或属性键名称(第1行,第45列(偏移量:44))   “MATCH() - [r] - >()其中id(r)= {1} REMOVE r。{2} RETURN r”   `

有什么建议吗?

由于

修改

我无法使用jdbc模板。 所以我用了String替换: 将该属性设置为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";

1 个答案:

答案 0 :(得分:1)

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

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

  • 标签
  • 关系类型
  • 属性

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