保留一个不是 NodeEntity 的 RelationshipEntity 属性
Persist a RelationshipEntity that is not a NodeEntity property
在 SDN4 中,我希望保留 @RelationshipEntity
而不是 @NodeEntity
的 属性。
示例:
@NodeEntity
public class User{
Long id;
}
@RelationshipEntity(type="FOLLOWS")
public class Follows{
@GraphId private Long relationshipId;
@StartNode private User follower;
@EndNode private User followee;
@Property private Date from;
public Follows(){}
public Follows(User u1, User u2){
this.follower = u1;
this.followee = u2;
}
}
@Repository
interface FollowsRepository extends GraphRepository<Follows>{}
然后像这样坚持 Follows
@Relationship
...
followsRepository.save(new Follows(user1, user2));
...
但是这样做时,Relationship 并没有持久化!!
遗憾的是 如已接受的答案所述,这(尚)无法完成(SDN 4.0.0.RELEASE)
解决方法 1
可以在 GraphRepositories
中使用 @Query
坚持 @RelationshipEntities
。
@Query("Match (a:User), (b:User) WHERE id(a) = {0}
AND id(b) = {1} CREATE (a)-[r:FOLLOWS {date:{2}}]->(b) RETURN r ")
解决方法 2
这也可以通过将 Follows
视为 @NodeEntity
来完成,这可能不是最有效的做法 但是 不会影响任何域的 @NodeEntities
,也不是服务层 AND 在加载和持久化实体时,您不必弄乱深度因子
@NodeEntity
public class User{
Long id;
}
@NodeEntity
public class Follows{
private Long Id;
@Relationship(type="FOLLOWER")
private User follower;
@Relationship(type="FOLLOWEE")
private User followee;
private Date from;
public Follows(){}
public Follows(User u1, User u2){
this.follower = u1;
this.followee = u2;
}
}
....
//Placed in userService
Follows createFollowsRelationship(User u1, User u2){
return followsRepository.save(new Follows(user1, user2));
}
.....
目前,当关系实体未被参与节点实体引用时,您不能直接保留它。
您必须保存起始节点并确保它具有对关系实体的引用。
将对关系实体的持久化方式进行一些改进,但在下一个版本中不会。
在 SDN4 中,我希望保留 @RelationshipEntity
而不是 @NodeEntity
的 属性。
示例:
@NodeEntity
public class User{
Long id;
}
@RelationshipEntity(type="FOLLOWS")
public class Follows{
@GraphId private Long relationshipId;
@StartNode private User follower;
@EndNode private User followee;
@Property private Date from;
public Follows(){}
public Follows(User u1, User u2){
this.follower = u1;
this.followee = u2;
}
}
@Repository
interface FollowsRepository extends GraphRepository<Follows>{}
然后像这样坚持 Follows
@Relationship
...
followsRepository.save(new Follows(user1, user2));
...
但是这样做时,Relationship 并没有持久化!!
遗憾的是 如已接受的答案所述,这(尚)无法完成(SDN 4.0.0.RELEASE)
解决方法 1
可以在 GraphRepositories
中使用 @Query
坚持 @RelationshipEntities
。
@Query("Match (a:User), (b:User) WHERE id(a) = {0}
AND id(b) = {1} CREATE (a)-[r:FOLLOWS {date:{2}}]->(b) RETURN r ")
解决方法 2
这也可以通过将 Follows
视为 @NodeEntity
来完成,这可能不是最有效的做法 但是 不会影响任何域的 @NodeEntities
,也不是服务层 AND 在加载和持久化实体时,您不必弄乱深度因子
@NodeEntity
public class User{
Long id;
}
@NodeEntity
public class Follows{
private Long Id;
@Relationship(type="FOLLOWER")
private User follower;
@Relationship(type="FOLLOWEE")
private User followee;
private Date from;
public Follows(){}
public Follows(User u1, User u2){
this.follower = u1;
this.followee = u2;
}
}
....
//Placed in userService
Follows createFollowsRelationship(User u1, User u2){
return followsRepository.save(new Follows(user1, user2));
}
.....
目前,当关系实体未被参与节点实体引用时,您不能直接保留它。 您必须保存起始节点并确保它具有对关系实体的引用。
将对关系实体的持久化方式进行一些改进,但在下一个版本中不会。