我有一个类似Twitter的域模型,其中USER可以关注其他用户。我的班级看起来像这样,
@NodeEntity
public class UserNodeEntity {
@GraphId
Long id;
@Property(name = "firstName")
private String firstName;
@Property(name = "lastName")
private String lastName;
@Relationship(type = "FOLLOWS", direction = Relationship.INCOMING)
private Set<UserNodeEntity> followers = new HashSet<>();
@Relationship(type = "HAS_ROLE", direction = Relationship.OUTGOING)
private Set<UserRole> roles = new HashSet<>();
// getters and setters
...
}
我添加新关注者的代码如下所示,
public void createNewFollower(String id, String followerId) {
UserNodeEntity usr = getUserById(id); //fetch the user by id from Neo4j
UserNodeEntity follower = getUserById(followerId);
if (usr != null) {
usr.getFollowers().add(follower);
userRepo.save(usr);
}
}
添加新角色的代码如下所示,
public void assignNewRole(String id, UserRole role) {
UserNodeEntity usr = getUserById(id); //fetch the user by id from Neo4j
if (usr != null) {
usr.getRoles().add(role);
userRepo.save(usr);
}
}
当我用跟随者和跟随者的ID调用 createNewFollower()方法时,会按预期创建一个关系(FOLLOWEE&lt; - FOLLOWS&lt; - FOLLOWER)。但是,当我使用用户ID和他的角色调用 assignNewRole()方法时,将通过名称 HAS_ROLE 创建一个新关系,并再创建一个 FOLLOWS 在前一个跟随者和被跟随者之间创建了关系。现在两个用户互相跟随而不是一个关系(FOLLOWEE&lt; - FOLLOWS&lt; - FOLLOWER)
任何人都可以帮助我理解为什么会这样吗?
我的Neo4j版本是2.3.3,spring-data-neo4j版本是4.0.0.RELEASE