Vous n'êtes pas connecté. Connexion
|
|
Tp3 : ajout de relations dans le TP2De $1Table des matièresIntroductionCette fois-ci nous allons jouer avec les relations. Nous allons ajouter au TP2 des relations entre des clients et des adresses. Ajout d'une relation 1-1 unidirectionnelle pour lier utilisateur et adresseNous allons ajouter une relation liant un utilisateur et une adresse. Plusieurs utilisateurs peuvent habiter à la même adresse. Comme une adresse peut être partagée par deux utilisateurs (John Lennon et Ringo Starr peuvent habiter ensembles par exemple), on ne fera ni insertion, ni suppression en cascade. Création de l'entité AdresseVous ajouterez au projet une classe entité Adresse, possèdant quelques propriétés. Dans cet exercice on se limite pour le moment au nom de la ville et au code postal. On utilisera une annotation de la "Bean Validation API" pour mettre des contraintes sur le code postal et sur le nom de la ville. Si jamais on essaie de créer une Adresse avec des attributs ne respectant pas ces contraintes, ou si on fait un setCity(...) ou setCodePostal(...) et que les paramètres ne sont pas valides, une exception sera levée. @Entity public class Adresse implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; @NotNull @Size(min=1) private String ville; @Pattern(regexp="[0-9]{5}") // On accepte les codes postaux du type "06410" private String codePostal; public Adresse() {} public Adresse(String ville, String codePostal) { this.ville = ville; this.codePostal = codePostal; } ... compléter avec les getters et setters pour chaque propriété } N'oubliez pas de générer les getters et setters pour chacune des propriétés. Ajout de la propriété "adresse" correspondant à la relation, dans la classe UtilisateurDans le fichier Utilisateur.java, ajoutez manuellement un attribut de type Adresse : private Adresse adresse; Normalement une petite lampe jaune doit apparaitre sur la gauche, car NetBeans a détecté que Adresse était de type entité. En cliquant sur la lampe on va voir apparaitre un menu proposant d'ajouter une annotation pour déclarer une relation entre entités: Choisissez la première option, nous allons bien créer une relation 1-1 unidirectionnelle entre Utilisateur et Personne. Normalement une annotation @OneToOne doit apparaître au-dessus de la propriété. Pensez à générer des getters et setters pour la propriété "adresse". Modification de la méthode "creerUtilisateursDeTest" pour créer des personnes avec des adressesNous allons commencer par modifier la méthode qui créée un utilisateur pour lui ajouter systématiquement une adresse (on suppose que l'adresse est en base avant que l'utilisateur soit créé) : public Utilisateur creeUtilisateur(String prenom, String nom, String login, Adresse a) { Utilisateur u = new Utilisateur(nom, prenom, login); // On met à jour la relation, elle est déjà en base u.setAdresse(a); // On persiste l'utilisateur, la relation est déjà en base, cela va donc // ajouter une ligne dans la table des utilisateur avec une clé étrangère // correspondant à l'adresse em.persist(u); return u; } Et donc voici la fonction qui créée des utilisateurs de test, modifiée pour qu'avant d'ajouter dans la base de données des utilisateurs on ait ajouté quelques adresses, que l'on utilisera pour construire les utilisateurs : public void creerUtilisateursDeTest() { // On cree des adresses et on les insère dans la base Adresse biot = new Adresse("Biot", "06410"); em.persist(biot); Adresse valbonne = new Adresse("Valbonne", "06560"); em.persist(valbonne); Adresse nice = new Adresse("Nice", "06000"); em.persist(nice); // Note : après un persist, les objets sont connectés // John et Paul habitent à Biot Utilisateur john = creeUtilisateur("John", "Lennon", "jlennon", biot); Utilisateur paul = creeUtilisateur("Paul", "Mac Cartney", "pmc", biot); Utilisateur ringo = creeUtilisateur("Ringo", "Starr", "rstarr", nice); Utilisateur georges = creeUtilisateur("Georges", "Harisson", "georgesH", valbonne); } Voilà, donc ci-dessus, dans un premier temps on fait des em.persis() sur des adresses. Puis on passe les adresses à la méthode creeUtilisateur(). Rappel du cours : après un persist, un select les objets sont "connectés" (on dit "managés" dans le jargon JavaEE). DOnc quand on fait, dans la méthode creeUtilisateur, un u.setAdresse(a), a est bien un objet en base, connecté. Et quand in fait em.persist(u), à ce moment là la relation dans la table des Utilisateur (uné clé étrangère correspondant à une clé primaire dans la table des adresses, est ajoutée). Exécutez votre projet, crééz des utilisateurs (soit c'est fait au déploiement si vous avez un ContextListener, soit il faut cliquer sur le bouton "crééer 4 utilisateurs de test"), puis regardez l'état de vos tables, et les données. Normalement vous devez avoir :
|
Powered by MindTouch Deki Open Source Edition v.8.08 |