2017-10-09 89 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] - 公司關係,這對我來說真的是無聊的事情。 –