如何在SDN 4.0中CRUD @RelationshipEntity

时间:2015-09-17 01:58:43

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

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

@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

我们是否为@Repository创建了一个Role? (我试过,它不起作用)

2 个答案:

答案 0 :(得分:3)

MicTech是对的。

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

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

与使用SDN的存储库方法相比,OGM的会话对象的限制性稍差,您可以调用

session.save(...)

在一个注释为RelationshipEntity的对象上,它将按预期执行。但是,实际上没有必要这样做:保存RelationshipEntity的开始或结束节点将确保图表被正确保留。

答案 1 :(得分:1)

SDN会自动为@RelationshipEntity执行CRUD,因为您无法在没有开始和结束节点的情况下在Neo4j中存储关系。