【问题标题】:How to CRUD @RelationshipEntity in SDN 4.0如何在 SDN 4.0 中对 @RelationshipEntity 进行 CRUD
【发布时间】:2015-12-13 19:11:14
【问题描述】:

如果我有一个丰富的关系实体,例如

@NodeEntity
public class Actor {
    Long id;
    private Role playedIn;
}

@RelationshipEntity(type="PLAYED_IN")
public class Role {
    @GraphId   private Long relationshipId;
    @Property  private String title;
    @StartNode private Actor actor;
    @EndNode   private Movie movie;
}

@NodeEntity
public class Movie {
    private Long id;
    private String title;
}

要 CRUD 两个 @NodeEntity,只需简单地创建一个 @Repository,例如

@Repository
public interface ActorRepository extends GraphRepository<Actor>{

}

做 CRUD 很简单

@Autowired
ActorRepository actorRepository

actorRepository.save(new Actor(....))

我的问题是,我们如何为 @RelationshipEntity Role 做 CRUD ?

我们是否为Role 创建了一个@Repository? (我试过了,还是不行)

【问题讨论】:

    标签: neo4j spring-data spring-data-neo4j


    【解决方案1】:

    MicTech 是对的。

    RelationshipEntity 由图中的一条边表示,而不是节点,目前 Repository 实现仅适用于可以作为节点持久化的对象。这不会给您带来任何问题。

    OGM 将保留您明确保存的对象中的所有可访问对象(除非您告诉它不要这样做)。这种行为意味着每当您保存 NodeEntity 时,连接对象之间的边都会自动创建/更新,无论这些边是由 RelationshipEntity 显式表示还是由 NodeEntity 实例之间的直接引用隐式表示。

    OGM 的 session 对象比使用 SDN 的 Repository 方法的限制要少一些,因为您可以调用

    session.save(...)

    在注解为关系实体的对象上,它会按照您的预期进行。但是,实际上没有必要这样做:保存 RelationshipEntity 的开始或结束节点将确保图形正确持久化。

    【讨论】:

    • 感谢您提供详细信息。真的很有帮助。
    【解决方案2】:

    SDN 自动为 @RelationshipEntity 执行 CRUD,因为如果没有开始和结束节点,您将无法在 Neo4j 中存储关系。

    【讨论】:

    • 我确实先保存了一个演员和一个电影,然后尝试使用 startNode 演员和 endNode 电影保存角色。
    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2019-04-15
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多