Связь neo4j с данными Spring в сущности

Изображение У меня есть следующая сущность: Компания и Сотрудник с аннотацией neo4j данных spring:

Company.java

@NodeEntity(label = "Company")
public class Company {
    /**
     * Graph ID
     */
    @GraphId
    private Long id;
    ......
}

Employee.java

@NodeEntity(label = "Employee")
public class Employee {
    /**
     * Graph ID
     */
    @GraphId
    private Long id;
    ......
}

Тогда есть сущность отношения для этих сущностей:

@RelationshipEntity(type = "EMPLOY")
public class EmployRel {
    /**
     * Graph ID
     */
    @GraphId
    private Long id;
    @StartNode
    private Company company;
    @EndNode
    private Employee employee;
    ......
}

Итак, как сохранить ссылку в Company и Person?

Company.java

@Relationship(type = "EMPLOY", direction = Relationship.OUTGOING)
private Set<EmployRel> employeeRel = new HashSet<>();

OR

@Relationship(type = "EMPLOY", direction = Relationship.OUTGOING)
private Set<Employee> employee = new HashSet<>();

Person.java

@Relationship(type = "EMPLOY", direction = Relationship.INCOMING)
private Company company = new Company();

OR

@Relationship(type = "EMPLOY", direction = Relationship.OUTGOING)
private EmployRel employRel = new EmployRel();

person Liping Huang    schedule 09.10.2017    source источник


Ответы (1)


Вы должны заявить в Company (исходящие отношения с Employee по EmployeeRel)

@Relationship
public Set<EmployRel> employees = new HashSet<>();

И обратное в Employee:

@Relationship(direction = Relationship.INCOMING)
public HashSet<EmployRel> isEmployedBy = new HashSet<>();

Обратите внимание, что здесь вы выбрали возможность навигации по отношению с обеих сторон, но это не обязательно. Также будет работать, чтобы по нему можно было переходить только с Company или Employee.

person nmervaillie    schedule 09.10.2017
comment
Так как насчет использования UNDIRECTED в направлении? - person Liping Huang; 10.10.2017
comment
UNDIRECTED - это вопрос семантики. Допустим, у вас есть PARTNER отношения: вы на самом деле не имеете значения направление, поэтому вы можете использовать UNDIRECTED в этом случае. Это будет работать так же, как и прямые отношения. - person nmervaillie; 10.10.2017
comment
Спасибо, я знаю семантику этого направления, в моем случае, возможно, вам действительно нужно прочитать мой другой вопрос, см. - stackoverflow.com/questions/46503104/, в этом вопросе компания может быть инвестором и получателем инвестиций, так будет Компания - [: ИНВЕСТИЦИИ] - Отношения с компанией, это действительно скучно для меня. - person Liping Huang; 10.10.2017
comment
Я оставил там комментарий - person nmervaillie; 10.10.2017