2017-10-11 3 views
-1

Je suis nouveau avec Hibernate et j'ai une question sur la configuration de ma base de données.Configuration d'une table avec Hibernate et 3 entités

J'ai 3 entités: Projet, R1 et R2. Un projet peut avoir un à plusieurs R1 et R1 peut appartenir à plus d'un projet. R2 appartient à un couple de Project-R1. Et R2 peut appartenir à plusieurs couples de Project-R1.

Exemples:

Mon idée est d'abord du projet de couple R1 et Souvenons-projet R1 est tout a. Donc une troisième table pour rejoindre la clé primaire du projet et R1. Lorsque je dois coupler R2 à un couple Projet-R1, je pensais utiliser une autre table de jointure avec les clés primaires des projets R1 et R2. Mais comment puis-je faire la dernière connexion en utilisant Hibernate sans faire une table de jointure qui a sa propre clé primaire à côté de Project-R1-R2.

est-ce encore possible?

Répondre

1

Hibernate docs donne cet exemple pour les associations ternaires:

@Entity 
public class Company { 
@Id 
int id; 
... 
@OneToMany // unidirectional 
@MapKeyJoinColumn(name="employee_id") 
Map<Employee, Contract> contracts; 
} 

// or 

<map name="contracts"> 
<key column="employer_id" not-null="true"/> 
<map-key-many-to-many column="employee_id" class="Employee"/> 
<one-to-many class="Contract"/> 
</map> 

Les docs notent également que R2- (P + R1) type d'association serait typiquement modélisée comme une classe d'entité distincte au lieu. Ce serait aussi mon approche pour cela.

+0

Merci pour la réponse. Si je comprends bien, est-il préférable de faire une table séparée contenant les ID de P, R1 et R2 comme clés étrangères? Mon problème avec ceci est que P et R1 doivent être couplés immédiatement, mais R2 peut l'être plus tard. Serait-ce une bonne idée d'enregistrer P et R1 dans une table de jointure et de faire une autre table quand on veut ajouter R2 à P + R1? Avoir une table supplémentaire – Urban

+0

Je ne pense pas que le R2 ajouté plus tard soit un problème dans l'une ou l'autre approche (association ou classe d'entité). Vous devez considérer que l'entité est créée uniquement lorsqu'un lien est créé dans la logique de votre application -> une ligne ne doit être insérée dans la table de jointure que lorsque vous ajoutez réellement les informations R2. – jaacco