Neo4j使用Neo4j jdbc删除节点属性
我在很多方面都有优势。我想保留边缘,但只删除name属性 我的java密码是: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
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";