【问题标题】:SDN4 - Updating a relationship entity's child causes the relationship to be deletedSDN4 - 更新关系实体的孩子会导致关系被删除
【发布时间】:2015-07-15 15:49:01
【问题描述】:

我正在编写一些支持 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 关系实体?每次我们有效地想要进行更新时,我们是否必须删除关系并从头开始创建它们?

【问题讨论】:

  • SOME_REL 由 SDN 4 中的关系实体支持?而“existingRelationship”是指这个关系实体还是?
  • 是的,它由关系实体支持并具有关联的GraphRepository。当我从头开始创建代码时,我已经能够测试并证明我的代码正确保存了与 Neo4j 的关系(使用 GraphUnit 的 printGraph())如果任何特定代码 sn-ps 有助于故障排除,我很高兴包括他们!
  • 是的,如果您可以分享您的关系实体的外观以及开始/结束节点实体,那就太好了。欢迎任何能帮助我编写测试的东西。相信您使用的是 SDN4 快照吗?如果是这样,您是否也在使用 neo4j-ogm 1.1.1-SNAPSHOT?
  • 嗨 Luanne,我在 - github.com/simon-lam/sdn-4-demo 创建了一个人为的项目,我的简化模型和一个演示问题的测试用例在里面 - SimpleRelationshipRepositoryTest;断言失败并且printGraph() 的输出不是我所期望的。如果有必要将其带入 JIRA 或离线,请告诉我! ./gradlew clean test --debug
  • 回答你的其他问题,不,我使用的是 1.1.0 的 neo4j-ogm。我正在点击repo.spring.io/libs-snapshot/org/neo4j/neo4j-ogm,但没有看到 1.1.1.SNAPSHOT?

标签: neo4j spring-data-neo4j-4


【解决方案1】:

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

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

【讨论】:

  • 更新:此问题已修复,将在下一个 SDN 4 版本中提供
  • 我已经下载了 SDN 4.0.0.RC2 并重新测试了它,看起来问题已经解决了。但是,我确实注意到关系实体上的 ID 确实发生了变化 - 这是预期的行为吗?
  • 是的,它会改变,因为它是创建到新端节点的新关系。无法替换现有关系的节点,您必须创建一个新关系(因此分配了新的 id),然后删除旧的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多