如何在 SDN 4.0 中增删改查 @RelationshipEntity
How to CRUD @RelationshipEntity in SDN 4.0
如果我有一个丰富的关系实体,例如
@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
进行增删改查?
我们要为 Role
创建一个 @Repository
吗? (我试过了,没用)
SDN 会自动为@RelationshipEntity 执行 CRUD,因为您无法在没有开始和结束节点的情况下在 Neo4j 中存储关系。
MicTech 是对的。
RelationshipEntity 在图中由一条边表示,而不是一个节点,目前 Repository 实现仅适用于可以作为节点持久化的对象。这应该不会给您带来任何问题。
OGM 将保留您明确保存的对象中的所有可访问对象(除非您告诉它不要这样做)。此行为意味着每当您保存 NodeEntity 时,连接对象之间的边都会自动 created/updated,无论这些边是由 RelationshipEntity 显式表示还是由 NodeEntity 实例之间的直接引用隐式表示。
与使用 SDN 的存储库方法相比,OGM 的会话对象的限制稍微少一些,因为您可以调用该方法
session.save(...)
在注释为 RelationshipEntity 的对象上,它将按照您的预期进行。但是,实际上没有必要这样做:保存 RelationshipEntity 的开始或结束节点将确保图形正确持久化。
如果我有一个丰富的关系实体,例如
@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
进行增删改查?
我们要为 Role
创建一个 @Repository
吗? (我试过了,没用)
SDN 会自动为@RelationshipEntity 执行 CRUD,因为您无法在没有开始和结束节点的情况下在 Neo4j 中存储关系。
MicTech 是对的。
RelationshipEntity 在图中由一条边表示,而不是一个节点,目前 Repository 实现仅适用于可以作为节点持久化的对象。这应该不会给您带来任何问题。
OGM 将保留您明确保存的对象中的所有可访问对象(除非您告诉它不要这样做)。此行为意味着每当您保存 NodeEntity 时,连接对象之间的边都会自动 created/updated,无论这些边是由 RelationshipEntity 显式表示还是由 NodeEntity 实例之间的直接引用隐式表示。
与使用 SDN 的存储库方法相比,OGM 的会话对象的限制稍微少一些,因为您可以调用该方法
session.save(...)
在注释为 RelationshipEntity 的对象上,它将按照您的预期进行。但是,实际上没有必要这样做:保存 RelationshipEntity 的开始或结束节点将确保图形正确持久化。