gpt4 book ai didi

java - 如何在 Spring Data Neo4j 中实现双向关系?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:22 50 4
gpt4 key购买 nike

我正在为一个非常简单的用例建模,使用 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);
}

最后,我使用以下方法来使用我的 Persons:

@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。然而,这会创建一个有向边,这不是我想要的。

为什么我在第一种情况下完全没有优势?有任何想法吗? :)

提前致谢,马努

最佳答案

所有 Neo4j 边都必须是有向的,它们不能是双向的。您可以单向建立友谊并无方向地查询它。或者您可以在两个 friend 之间创建两条单独的边。我认为后者更灵活,因为一个人可能会将另一个人视为 friend ,但反之则不然。

关于java - 如何在 Spring Data Neo4j 中实现双向关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28194784/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com