我正在建模一个非常简单的用例,使用Spring Data Neo4j:我想拥有人员,这些人员通过友谊关系相互连接。这是我的代码(此处省略了getter和setter):
@NodeEntity
public class Person {
@GraphId
private Long id;
private String name;
private String password;
@RelatedTo(type = "FRIEND_OF", direction = Direction.BOTH)
private Set<Person> friends = new HashSet<Person>();
public Person() {};
public Person(String name, String password) {
this.name = name;
this.password = password;
}
public void befriend(Person person) {
this.friends.add(person);
}
最终,我使用以下方法来利用我的人员:
@Transactional
private void populateTwoPersons() {
Person person1 = new Person("Alice", "pw1");
Person person2 = new Person("Bob", "pw2");
List<Person> persons = Arrays.asList(person1, person2);
personRepository.save(persons);
person1.befriend(person2);
personRepository.save(persons);
}
在我看来,友谊关系应该是双向的,这就是为什么我将其方向设置为(direction = Direction.BOTH)。现在,在执行populateTwoPersons()方法时,会创建两个人节点,但它们之间没有边缘。
我尝试过的想法是修改befriend()函数为
public void befriend(Person person) {
this.friends.add(person);
person.getFriends().add(this);
}
或者将关系的方向设置为direction=Direction.OUTGOING。然而,这会创建一个有向边,这不是我想要的。
为什么在第一种情况下我根本没有得到一条边呢?有什么想法吗?:)
提前感谢, Manu