2017-10-09 6 views
0

Image Je suis l'entité suivante: Société et les employés, avec l'annotation Neo4j de données de printemps:relation de données de printemps dans l'entité

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

Ensuite, il y a l'entité de relation pour ces entités:Alors comment conserver la référence dans Company et Person?

Company.java

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

OU

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

OU

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

Répondre

1

Vous devez déclarer dans Company (relation sortante Employee par EmployeeRel)

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

Et l'inverse dans Employee:

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

Notez que là, vous avez choisi d'avoir la relation navigable des deux côtés, mais ce n'est pas obligatoire. Il fonctionnera également pour l'avoir navigable seulement de Company ou de Employee.

+0

Alors, que diriez-vous d'utiliser 'UNDIRECTED' dans la direction? –

+0

'UNDIRECTED' est une question de sémantique. Disons que vous avez une relation PARTNER: vous n'avez pas vraiment d'importance dans la direction, vous pouvez donc utiliser UNDIRECTED dans ce cas. Cela fonctionnera de la même manière qu'une relation dirigée. – nmervaillie

+0

Merci, je sais cette direction sémantique, pour mon cas, peut-être vous avez besoin de lire mon autre question en effet, s'il vous plaît voir - https://stackoverflow.com/questions/46503104/how-to-modeling-this-relation-in- spring-data-neo4j, dans cette question, la société peut être l '«investisseur» et «Investee», donc aura la société - [: INVESTISSEMENT] - Relation d'entreprise, ce sont vraiment les choses ennuyeuses pour moi. –