Узел Person:
- имя
- фамилия
- адрес
- электронное письмо
- телефонный номер
Узел компании:
- Имя
- адрес
- электронное письмо
- телефонный номер
Отношения:
- Человек - [SPOUSE] - ›Человек
- Человек - [SIBLING] - ›Человек
- Человек - [СЕМЬЯ] - ›Человек
- Компания - [СОТРУДНИК] - ›Человек
Личность:
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;
}
Когда я создаю человека для Джейн, я также добавляю родство с Джоном.
Запуск 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":"",
"email":"",
"phoneNumber":"",
"personId":"f825cedd-7328-4f9d-b0fd-a33726814f25",
"firstName":"John",
"lastName":"smith",
"spouse":null,
"sibling":[],
"family":null
}
],
"family":null
}
Однако родственные отношения должны быть двунаправленными. Запуск person.fetchById("f825cedd-7328-4f9d-b0fd-a33726814f25")
извлекает только узел John.
{
"address":"",
"email":"",
"phoneNumber":"",
"personId":"f825cedd-7328-4f9d-b0fd-a33726814f25",
"firstName":"John",
"lastName":"Smith",
"spouse":null,
"sibling":null,
"family":null,
"closeFriend":null,
"friend":null
}
Вот в чем проблема. Я мог бы добавить еще одно родство между Джоном и Джейн. Но это фактически создает бесконечный цикл между ними. И результат person.fetchById
оказывается мусором.
- Есть ли способ ограничить глубину узлов, возвращаемых при выборке узлов?
- Я новичок в neo4j, поэтому подозреваю, что мой дизайн неправильный. Как лучше всего моделировать такие отношения?