如何解决是否可以在具有相同标签的节点之间创建双向关系?
人物节点:
- 名字
- 姓氏
- 地址
- 电子邮件
- 电话号码
公司节点:
- 姓名
- 地址
- 电子邮件
- 电话号码
关系:
- 人 -[配偶]-> 人
- 人 -[SIBLING]-> 人
- 人 -[FAMILY]-> 人
- 公司 -[EMPLOYEE]-> 人员
个人实体:
public class Person {
@Id
@GeneratedValue
Long personId;
@Builder
public Test(Long personId,String firstName,String lastName,String address,String email,String phoneNumber) {
this.personId = id;
this.firstName = firstName;
this.lastName = lastName;
this.addresss = address;
this.email = email;
this.phoneNumber = phoneNumber
}
@NotEmpty(message = "Please provide a first name")
String firstName;
@NotEmpty(message = "Please provide a last name")
String lastName;
String address;
String email;
String phoneNumber;
@Relationship(type = "SPOUSE",direction=Relationship.OUTGOING)
public Set<Person> spouse;
@Relationship(type = "SIBLING",direction=Relationship.OUTGOING)
public Set<Person> sibling;
@Relationship(type = "FAMILY",direction=Relationship.OUTGOING)
public Set<Person> family;
}
当我为 Jane 创建 Person 时,我还添加了与 John 的兄弟关系。
运行 person.fetchById("29d31f6c-edfe-48a2-9ab2-3baed5d5ae69")
检索节点 Jane 和对应的兄弟节点 John。
{
"address":"","email":"","phoneNumber":"","personId":"29d31f6c-edfe-48a2-9ab2-3baed5d5ae69","firstName":"Jane","lastName":"Smith","spouse":null,"sibling":[
{
"address":"","personId":"f825cedd-7328-4f9d-b0fd-a33726814f25","firstName":"John","lastName":"smith","sibling":[],"family":null
}
],"family":null
}
然而,兄弟关系应该是双向的。运行 person.fetchById("f825cedd-7328-4f9d-b0fd-a33726814f25")
只会检索节点 John。
{
"address":"","sibling":null,"family":null,"closeFriend":null,"friend":null
}
问题就在这里。我可以在约翰和简之间添加另一个兄弟关系。但是,这有效地在两者之间创建了无限循环。而 person.fetchById
的输出最终变成了垃圾。
- 有没有办法限制获取节点时返回的节点深度?
- 我是 Neo4j 的新手,所以我怀疑我的设计是错误的。模拟这种关系的最佳方式是什么?
解决方法
您在这里使用 SDN?
来自 Spring Data Neo4j 文档:
如果你不关心方向,那么你可以指定 direction=Relationship.UNDIRECTED 这将保证两个节点实体之间的路径可以从任一侧导航。
,据我所知(我也刚开始学习 Neo4j)你不能有双向关系,总是建议有两个方向。
如果您决定在另一个方向添加另一个关系,您可以将跃点数限制为一个:
How can Cypher Impose a Maximum Number of Hops Only Counting a Specific Type of Node?
或者,如果您想查看更长的关系链,也许可以对结果设置一个条件,不返回结果中的原始节点?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。