我使用Spring Data Neo4J来定义不同人之间的无向关系。下面提供了一个示例实体类。Neo4J中的无向关系
@NodeEntity(label="Person")
public class Person {
@GraphId
private Long id;
private String name;
@Relationship(type = "FRIEND_WITH", direction=Relationship.UNDIRECTED)
List<Person> friends;
}
如上所述,Person具有“Person”类型的朋友的列表。的关系保持不定向,以保证如果一个人A是“Friend_With”人B,那么某乙也是“Friend_With”人A.
添加好友的代码如下
if((person.getFriends() == null)||(person.getFriends().size()==0)){
List<Person> friendList = new ArrayList<Person>();
friendList.add(friend);
person.setFriends(friendList);
}else{
person.getFriends().add(friend);
}
personRepository.save(person);
提供我已经加入PersonB作为人物的朋友,所以理想情况下,这应该意味着
PersonA - [:FRIEND_WITH] -> PersonB
PersonB - [:FRIEND_WITH] -> PersonA
的关系是无向
但是当我查询,在Neo4j的有
MATCH (p:Person)-[r:FRIEND_WITH]->(b:Person) where p.name = "PersonA" return p,b
我得到PersonA,PersonB的结果。但是当我查询时
MATCH (p:Person)-[r:FRIEND_WITH]->(b:Person) where p.name = "PersonB"
没有行被返回。因此实体类中指定的方向似乎不起作用。此外,Neo4J浏览器中的图形显示从PersonA到PersonB的有向边。
我想要的是,如果PersonA是PersonB的朋友,我会得到结果,不管我以哪种方式询问。该代码似乎工作
MATCH (p:Person)-[r:FRIEND_WITH]-(b:Person) where p.name = "PersonB"
其中“ - >”替换为“ - ”,但我不想使用此。
我该怎么办?
我使用的弹簧数据neo4j.version 4.0.0.RELEASE和弹簧引导版本弹簧引导启动父1.3.0.M5
是的,我可以,但“direction = Relationship.UNDIRECTED”的用法是什么? – Soumya
SDN将为您选择一个方向。双向关系不好btw http://graphaware.com/neo4j/2013/10/11/neo4j-bidirectional-relationships.html –
好吧,谢谢... – Soumya