2012-04-06 4 views
1

Je viens de commencer avec JEE6 en utilisant netbeans IDE, et maintenant j'apprends JPA avec toplink. J'utilise Netbeans IDE et mySQL.JPA many to many cascading delete

J'ai créé 2 tables très simples, avec une relation plusieurs à plusieurs:

table student 
int id PK 
varchar name 

table teacher 
int id PK 
varchar name 

//the mapping 
table studentTeacher 
int studentID FK 
int teacherID FK 

Le tableau studentTeacher cartes id étudiants à id Les enseignants, avec cascade sur suppression et mise à jour. J'ai utilisé la fonctionnalité netbeans 'generate entities from database', et ça marche bien: Je peux ajouter un objet Student à ma table d'étudiant, et je peux ajouter un objet Teacher à ma table d'enseignant. Le problème est, comment puis-je créer une entité «studentTeacher» et le persister? Ou c'est déjà fait par l'IDE?

Voici les annotations générées automatiquement à partir Netbeans:

//Student Entity annotation generated by Netbeans 7.0.1 

@Id 
@Basic(optional = false) 
@NotNull 
@Column(name = "id") 
private Integer id; 
@Size(max = 40) 
@Column(name = "name") 
private String name; 
@JoinTable(name = "studentTeacher", joinColumns = 
{ 
    @JoinColumn(name = "studentID", referencedColumnName = "id") 
}, inverseJoinColumns = 
{ 
    @JoinColumn(name = "teacherID", referencedColumnName = "id") 
}) 
@ManyToMany 
private Collection<Teacher> teacherCollection; 

Merci!

Répondre

4

À proprement parler, c'est déjà fait par l'implémentation JPA, dans votre cas: TopLink. Vous n'avez pas besoin d'une entité StudentTeacher car ce n'est pas une entité en soi, c'est simplement une table auxiliaire requise par le schéma Entité-Relationnel afin de modéliser votre relation plusieurs-à-plusieurs.

Si votre relation entre Student et Teacher avait des attributs supplémentaires en dehors des clés étrangères des deux entités, alors vous aurez besoin d'une entité supplémentaire, mais vous les entités déjà existantes (Student et Teacher) ne disposera plus d'un grand nombre à plusieurs relation, mais un-à-plusieurs/plusieurs-à-un avec cette entité intermédiaire StudentTeacher.

Mon conseil, si votre modèle est aussi simple que dans votre exemple, laissez tel quel.

+0

Très bien, mais comment puis-je remplir la table studentTeacher? Ce qui compte vraiment dans ce cas, c'est le mappage fourni par cette table. Je suis confus, achetant un livre maintenant. – Fernando

+0

Vous devez manipuler les listes qui mappent la relation many-to-many avec soin, donc, si vous ajoutez un 'Teacher' à votre entité' Student', alors assurez-vous que vous ajoutez aussi cette instance 'Student' au précédent mentionné 'Maître'. JPA effectuera la "population" de votre table d'intermédiaire lorsque vous invoquerez 'EntityManager.persist (student)' ou 'EntityManager.persist (teacher)' (et la même chose avec n'importe quelle autre méthode) –

+0

Merci, je vais essayer et commencez JPA depuis le début. – Fernando