Sou*_*mya 2 neo4j cypher spring-data spring-data-neo4j
我使用Spring Data Neo4J来定义不同人之间的无向关系.下面提供了一个示例实体类.
@NodeEntity(label="Person")
public class Person {
@GraphId
private Long id;
private String name;
@Relationship(type = "FRIEND_WITH", direction=Relationship.UNDIRECTED)
List<Person> friends;
}
Run Code Online (Sandbox Code Playgroud)
如上所述,Person具有"Person"类型的朋友列表.这种关系保持不变,以确保如果一个人A是"Friend_With"人B,那么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);
Run Code Online (Sandbox Code Playgroud)
我已将PersonB添加为PersonA的朋友,所以理想情况下,这应该意味着
PersonA - [:FRIEND_WITH] -> PersonB
PersonB - [:FRIEND_WITH] -> PersonA
Run Code Online (Sandbox Code Playgroud)
因为这种关系是无向的
但是当我在Neo4J中查询时
MATCH (p:Person)-[r:FRIEND_WITH]->(b:Person) where p.name = "PersonA" return p,b
Run Code Online (Sandbox Code Playgroud)
我得到的结果是PersonA,PersonB.但是当我在询问时
MATCH (p:Person)-[r:FRIEND_WITH]->(b:Person) where p.name = "PersonB"
Run Code Online (Sandbox Code Playgroud)
没有返回任何行.因此,实体类中指定的方向似乎不起作用.此外,Neo4J浏览器中的Graph显示了从PersonA到PersonB的有向边.
我想要的是,如果PersonA是PersonB的朋友,我会得到结果,无论我问哪个方式.代码似乎适用
MATCH (p:Person)-[r:FRIEND_WITH]-(b:Person) where p.name = "PersonB"
Run Code Online (Sandbox Code Playgroud)
其中" - >"替换为" - ",但我不想使用它.
我该怎么办 ?
我使用的是spring-data-neo4j.version 4.0.0.RELEASE和spring-boot version spring-boot-starter-parent 1.3.0.M5
Chr*_*sen 15
在Neo4j中,所有关系都是定向的.
但是,您可以在查询时获得无向边的概念.只需从MATCH查询中删除方向:
MATCH (p:Person)-[r:FRIEND_WITH]-(b:Person) where p.name = "PersonB"
Run Code Online (Sandbox Code Playgroud)
你为什么不想用这个?
| 归档时间: |
|
| 查看次数: |
5170 次 |
| 最近记录: |