![]() |
![]() |
Accueil > Intranet Michel Buffa > Applications web, M1 Miage 2010-2011 > Gestion des relations avec JPA
Gestion des relations avec JPADe $1Table des matières
IntroductionDans ce TP vous allez rajouter des tables au TP précédent, et commencer à gérer des relations. Ajout d'une relation 1-N "Adresse"On suppose qu'une personne peut avoir plusieurs adresses (une adresse professionnelle et une adresse personnelle par exemple, on utilisera pour cela l'attribut "description") Commençons par créer une classe entité "Adresse" : @Entity public class Adresse implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String description; private String rue; private int codePostal; private String ville; ... On rajoute la relation dans la classe Utilisateur, on a ici une relation 1-N, unidirectionnelle, avec creation et suppression en cascade et chargement agressif : @Entity public class Utilisateur implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String firstname; private String lastname; private String login; @OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.EAGER) Collection<Adresse> listeDesAdresses; ...
Test de l'application modifiée, précautions à prendreVous venez de modifier les modèles de données, les tables vont devoir être regénérées. Vérifiez que votre unité de persistence est bien en mode "drop and create" (pour cela, double cliquez sur le fichier persistence.xml dans "configuration"). Déployez ou exécutez le projet, vérifiez que les tables correspondent bien au nouveau modèle que vous avez créé (il doit par exemple y avoir au moins deux tables maintenant, une pour les Utilisateurs et une pour les Adresses) Ajout d'une relation "Email" dans la classe UtilisateurProcédez comme pour les adresses, maitenant on veut ajouter le fait qu'un utilisateur peut avoir plusieurs adresses emails. Idem : modifiez le code qui créee les utilisateurs de test et ajoutez des adresses emails. Transformation de la relation Utilisateur-Adresse en relations N-N bi-directionnelleMaitenant on va modifer le code des entités, de la créations des utilisateurs de test et des interfaces graphiques pour gérer le fait qu'à une certaine adresse plusieurs personnes peuvent habiter (cas d'une famille par exemple). On veut une relation bi-directionnelle cette fois-ci : lister les adresses d'une personne mais aussi les personnes qui habitent à une adresse. Faites attention au mode de chargement (agressif ou fainéant), etc. Testez votre application juste avec des utilisateurs et des adresses de test pour commencer. Modifier la JSP pour afficher les adresses et à partir des adresses cliquer sur un lien pour voir les personnes. Si vous testez la suppression d'un utilisateur, cela ne marchera pas car la relation Utilisateur-Adresse étant en CascadeType.ALL, la destruction d'un utilisateur provoque la destruction des relations vers ses adresses, et comme cela se propage récursivement et que la relation est bi-directionnelle, cela revient à supprimer aussi l'utilisateur -> erreur. Solution : utiliser à la place un attribut JPA que l'on place dans les annotations de la relation : Ajout d'une fonctionnalité pour ajouter une nouvelle adresse à une personneDans vos pages JSP : ajoutez une interface pour pouvoir ajouter une adresse (postale et email) à une personne :
Mots clés:
|
Powered by MindTouch Deki Open Source Edition v.8.08 |