2017-10-09 68 views
0

图片我有以下实体:公司与员工,与弹簧数据Neo4j的注解:弹簧数据Neo4j的关系

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; 
    ...... 
} 

那么如何在CompanyPerson中保留参考?

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(); 

回答

1

你有Company(发布给Employee通过EmployeeRel关系)

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

和逆宣布在Employee

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

注意您选择,这里有通航的关系双方,但它不是强制性的。它也可以使它仅从CompanyEmployee通航。

+0

那么如何在方向上使用'UNDIRECTED'? –

+0

'UNDIRECTED'是一个语义问题。假设你有一个“PARTNER”关系:你并不关心方向,所以你可以在这种情况下使用'UNDIRECTED'。它将与定向关系一样工作。 – nmervaillie

+0

谢谢,我知道这个方向的语义,对于我的情况,也许你需要阅读我的另一个问题确实,请参阅 - https://stackoverflow.com/questions/46503104/how-to-modeling-this-relation-in- spring-data-neo4j,在这个问题中,公司可以是“投资者”和“被投资人”,所以会有公司 - [:INVESTMENT] - 公司关系,这对我来说真的是无聊的事情。 –