J'ai 2 entités: Classe (d'étudiants) et Étudiant. Un étudiant peut être dans plusieurs classes (comme au collège) et une classe a beaucoup d'étudiants. Le problème est de savoir comment s'assurer que cette entité, générée au milieu, possède 2 clés primaires, les identifiants de chaque autre entité (Student et Class). J'ai besoin de savoir comment le créer en utilisant des annotations. J'utilise les annotations EJB3 et JPA dans le projet.Comment puis-je gérer pour créer une relation plusieurs-à-plusieurs. L'entité générée aura des attributs supplémentaires.
1
A
Répondre
3
D'abord, vous n'avez pas besoin d'une entité intermédiaire. Vous avez deux entités et une table de jointure entre eux.
Vous avez besoin d'une entité intermédiaire uniquement si vous avez des informations supplémentaires sur la relation. Par exemple, une colonne StudentClass
peut avoir une colonne timesAbsent
.
Dans le cas où vous avez vraiment besoin de la troisième entité, vous pouvez:
- un
@EmbeddedId
, où vous définissez une classe distincte tenant les deux parties de la clé primaire. Cette classe doit être@Embeddable
- et
@IdClass
qui vous permettra de spécifier deux champs@Id
. Vous aurez à nouveau besoin d'une autre classe pour contenir les deux champs représentant la clé.
See this question pour quelle option choisir.
Notez que vous avez donc une clé primaire composite, pas deux clés primaires (que vous ne pouvez pas avoir)
0
Je sais comment faire cela se produire à l'aide mise en veille prolongée. Peut-être que ça va aider.
Définissez le type de collection Définir.
public class CollegeClass {
private Set<Student> students;
}
public class Student {
private Set<CollegeClass> classes;
}