我使用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