如果我有一个丰富的关系实体,例如
@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
?
我们是否为@Repository
创建了一个Role
? (我试过,它不起作用)
答案 0 :(得分:3)
MicTech是对的。
RelationshipEntity由图中的边而不是节点表示,并且当前的Repository实现仅适用于可以作为节点持久化的对象。这不会给你带来任何问题。
OGM将保留您明确保存的所有可到达对象(除非您告诉它不要)。此行为意味着无论何时保存NodeEntity,都会自动创建/更新连接对象之间的边,无论这些边是由RelationshipEntity显式表示还是由NodeEntity实例之间的直接引用隐式表示。
与使用SDN的存储库方法相比,OGM的会话对象的限制性稍差,您可以调用
session.save(...)
在一个注释为RelationshipEntity的对象上,它将按预期执行。但是,实际上没有必要这样做:保存RelationshipEntity的开始或结束节点将确保图表被正确保留。
答案 1 :(得分:1)
SDN会自动为@RelationshipEntity执行CRUD,因为您无法在没有开始和结束节点的情况下在Neo4j中存储关系。