neo4j - SDN4 - 更新关系实体的子项会导致关系被删除

标签 neo4j spring-data-neo4j-4

我正在编写一些 GraphUnit 支持的集成测试,并且在我尝试更新现有关系指向的子节点时注意到了奇怪的行为。

给定与支持图的现有关系,如下所示:

(A:ParentNode)-[:SOME_REL {id: 1}]->(B:ChildNode)

如果我尝试通过编写如下代码来更新它:
ChildNode newChildNode = new ChildNode();
existingRelationship.setChild(newChild);
RelationshipRepository.save(existingRelationship);

结果图如下所示:
(A:ParentNode)
(B:ChildNode)
(C:ChildNode)

但我希望它看起来像:
(A:ParentNode)-[:SOME_REL {id: 1}]->(C:ChildNode)

我在执行 GraphRepository 时看到的原始日志输出 save()在 Cypher 查询中包含一个删除关系的 DELETE 语句:
10:32:32.218 [main] DEBUG o.n.o.s.r.SessionRequestHandler - {"statements":[{"statement":"MATCH ()-[_0]->() WHERE id(_0)=0 SET _0+={_0_props}  WITH _0 MATCH ($0)-[_1:`SOME_REL`]->($1) WHERE id($0)=0 AND id($1)=1 AND id(_1)=0 DELETE _1","parameters":{"_0_props":{"doubleProp":1.0}},"resultDataContents":["row"],"includeStats":false}]}
10:32:32.219 [main] INFO  o.n.o.session.request.DefaultRequest - POST http://localhost:7475/db/data/transaction/commit, request: {"statements":[{"statement":"MATCH ()-[_0]->() WHERE id(_0)=0 SET _0+={_0_props}  WITH _0 MATCH ($0)-[_1:`SOME_REL`]->($1) WHERE id($0)=0 AND id($1)=1 AND id(_1)=0 DELETE _1","parameters":{"_0_props":{"doubleProp":1.0}},"resultDataContents":["row"],"includeStats":false}]}

这是一个错误吗?还是我没有正确更新 SDN4 关系实体?每次我们有效地想要进行更新时,我们是否必须删除关系并从头开始创建它们?

最佳答案

不幸的是,这是一个错误。解决方法是使用新的结束节点创建一个新的 SimpleRelationship,替换父 SimpleNode 上的现有节点并保存新的 RE。

可以在此处跟踪此问题 https://jira.spring.io/browse/DATAGRAPH-706

关于neo4j - SDN4 - 更新关系实体的子项会导致关系被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31435165/

相关文章:

neo4j - 如何通过在 neo4J apoc 中加载更新的 CSV 文件来更新 graphdb 中现有的特定节点

C# Neo4jClient TaskCancelled 异常

c# - 在 Neo4jClient 中使用 UNWIND 进行 Cypher 查询

spring-boot 从 1.3.2 升级到 1.3.3 : logback issue

java - @QueryResult 映射错误

graph - 描述 Neo4j 中多级关系的 Cypher 查询?

neo4j - 实体不是持久类 NEO4J 4.0.0 的实例

java - 有没有办法在 Spring Data Neo4j 4 中拥有可嵌入类

java - Spring Neo4j - 无法访问非托管扩展

Neo4j 查询返回 BadInputException - 通过 S.D.N 执行时