Java 如何在Spring数据Neo4j中实现双向关系?
我正在使用Spring数据Neo4j对一个非常简单的用例进行建模:我希望有人,他们通过友谊关系联系在一起。这是我的代码(这里省略了getter和setter): 或者将关系的方向设置为direction=direction.OUTGOING。但是,这会创建一个定向边,这不是我想要的 为什么我在第一种情况下不占优势呢?有什么想法吗?:) 提前感谢,,Java 如何在Spring数据Neo4j中实现双向关系?,java,neo4j,spring-data,relationship,bidirectional,Java,Neo4j,Spring Data,Relationship,Bidirectional,我正在使用Spring数据Neo4j对一个非常简单的用例进行建模:我希望有人,他们通过友谊关系联系在一起。这是我的代码(这里省略了getter和setter): 或者将关系的方向设置为direction=direction.OUTGOING。但是,这会创建一个定向边,这不是我想要的 为什么我在第一种情况下不占优势呢?有什么想法吗?:) 提前感谢,, Manu所有Neo4j边必须定向,并且不能是双向的。您可以单向创建友谊,也可以无方向查询友谊。或者,可以在两个朋友之间创建两条单独的边。我认为后者是
Manu所有Neo4j边必须定向,并且不能是双向的。您可以单向创建友谊,也可以无方向查询友谊。或者,可以在两个朋友之间创建两条单独的边。我认为后者是更灵活的,因为一个人可以考虑另一个朋友,但反之亦然。 < P>如果你不关心方向,那么你可以指定“代码>方向=关系”,无方向的< /代码>,这将保证两个节点实体之间的路径可以从任何一方通航。
例如,考虑<代码>合作伙伴> <代码> >两个公司之间的关系,其中
(A)-[:PARTNER_OF]→(B) implies (B)-[:PARTNER_OF]→(A)
关系的方向并不重要;只有这两家公司之间存在一种合作伙伴关系这一事实才是重要的。因此,无方向的
关系是正确的选择,确保两个合作伙伴之间只有一个此类关系,并且可以从任一实体在他们之间导航
资料来源:良好的关系:。回答得好。有向边不必这样处理,您可以始终将它们视为无向边,这很好。是2个关系(均为定向关系)还是1个关系?我认为这取决于元数据需求。如果关系实际上是唯一的,而不是相互的(即,我跟随Bob,但他不跟随我),则2条边。如果边不是唯一的,最好只使用一个边,而不是使用2,这样可以“双向定向”保存边并使用“-”而不是“”进行查询。谢谢,另一个人的空哈希集覆盖了当前边的关系。将其设置为null或仅保存person1。Neo4j中的关系始终是定向的。
@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);
}
public void befriend(Person person) {
this.friends.add(person);
person.getFriends().add(this);
}
(A)-[:PARTNER_OF]→(B) implies (B)-[:PARTNER_OF]→(A)