我正在编写一些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关系实体?每当我们有效地想要进行更新时,我们是否必须删除关系并从头开始创建它们?
答案 0 :(得分:0)
不幸的是,这是一个错误。解决方法是使用新的结束节点创建一个新的SimpleRelationship,替换父SimpleNode上的现有一个并保存新的RE。
跟踪此问题