温馨提示:本文翻译自stackoverflow.com,查看原文请点击:neo4j ogm - Can we update a RelationshipEntity to point to a different NodeEntity?
neo4j-ogm

neo4j ogm - 我们可以更新一个RelationshipEntity指向另一个NodeEntity吗?

发布于 2020-03-30 21:37:45

我正在使用Neo4j-OGM更新a @RelationshipEntity指向另一个节点对象。但是,当我尝试保留更改时,不会保存更改,而只是恢复为原始实体。

例如,这就是我要实现的目标:

from:    (X)--[R]->(M)    (Y)

  to:    (Y)--[R]->(M)    (X)

我在CineastsRelationshipEntityTest集成测试中做了一个例子

@Test
public void canUpdateRelationshipEntity() {
    Movie movie = new Movie("M", 2020);

    Actor actor = new Actor("X");
    Role relationship = actor.playedIn(movie, "R");

    Actor actor2 = new Actor("Y");
    actor2.setRoles(new HashSet<>());

    assertThat(actor.getRoles()).hasSize(1);
    assertThat(actor2.getRoles()).hasSize(0);

    session.save(actor);
    session.save(actor2);

    session.clear();


    // try to update the relationship:
    relationship.setActor(actor2);
    actor.getRoles().remove(relationship);
    actor2.getRoles().add(relationship);

    assertThat(actor.getRoles()).hasSize(0);
    assertThat(actor2.getRoles()).hasSize(1);

    session.save(actor);
    session.save(actor2);

    session.clear();



    Actor loadedActor = session.load(Actor.class, actor.getUuid());
    Actor loadedActor2 = session.load(Actor.class, actor2.getUuid());

    assertThat(loadedActor.getRoles()).hasSize(0);
    assertThat(loadedActor2.getRoles()).hasSize(1);
}

最后,loadedActorloadedActor2没有反映更新的关系。

查看更多

提问者
cmosher01
被浏览
13
meistermeier 2020-01-31 18:13

您可以着重于将属性保留在Role实例中。但是,当您尝试更新时,必须重置ID。关系是没有什么可以重用的,但必须重新创建。

Neo4j-OGM以给定的ID假设仅属性已更改,而起始或结束节点未更改。

关于测试用例的一些说明:

  • 如果调用session.clear()(在第一次保存之后),则必须在处理模型之前重新加载actor,以使Neo4j-OGM知道更改。
  • 只需保存即可actor保存级联到所有可访问的节点和关系。即使在删除的情况下,如果您尊重第一个备注,这也应该有效;)