Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
enseignement:tp:bd:tp-orm:2013 [2013/09/22 09:54] ecoquery [Mise en oeuvre de mappings Objet/Relationnels] |
enseignement:tp:bd:tp-orm:2013 [2013/10/09 05:27] (Version actuelle) ecoquery [Mise en oeuvre de mappings Objet/Relationnels] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Mise en oeuvre de mappings Objet/ | ====== Mise en oeuvre de mappings Objet/ | ||
- | ** Sujet en cours d'élaboration | + | |
+ | === Rendu === | ||
+ | |||
+ | Ce TP est à rendre pour le dimanche < | ||
+ | |||
+ | On déposera une archive zip sur spiral: | ||
+ | | ||
+ | | ||
+ | * Nom1 est le nom du premier étudiant du binôme, Nom2 celui du deuxième étudiant. | ||
+ | * Numero1 est le numéro | ||
+ | | ||
+ | * L' | ||
+ | * Le projet fourni mis à jour par vos soins pour répondre au travail demandé. | ||
+ | * Un fichier '' | ||
+ | nom1=aaaaaa | ||
+ | prenom1=bbbbbb | ||
+ | numero1=1234567 | ||
+ | nom2=cccccc | ||
+ | prenom2=dddddd | ||
+ | numero2=2345678</ | ||
+ | * Il est demandé (avant de faire l' | ||
+ | * supprimer le répertoire target | ||
+ | * supprimer les .class et autres .jar qui restent | ||
+ | * effectuer un commit mercurial local (qui pourra servir en cas de litige sur e.g. la date de rendu) | ||
+ | * L' | ||
+ | * Il est fortement recommandé de tester que l' | ||
+ | * La zone de dépôt spiral sera fermée automatiquement une fois la date limite dépassée | ||
+ | |||
+ | === Evaluation === | ||
+ | |||
+ | Le TP sera évalué sur le fonctionnement du mapping et sur la cohérence du modèle objet, mais surtout sur les commentaires qui viendront expliciter ces éléments. En particulier chaque occurrence de chaque annotation devra être commentée afin d' | ||
+ | |||
+ | Le non respect des consignes de rendu entrainera une sanction sur la note du TP. | ||
+ | |||
+ | === Remarques diverses === | ||
+ | |||
+ | |||
+ | <note warning> | ||
+ | <note warning> | ||
+ | <code xml> | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <note tip>Une erreur du type < | ||
===== Introduction ===== | ===== Introduction ===== | ||
Ligne 12: | Ligne 56: | ||
* {{: | * {{: | ||
* [[enseignement: | * [[enseignement: | ||
- | |||
- | ===== Schema relationnel ===== | ||
- | |||
- | On considère le schéma relationnel fourni dans un des fichiers suivants (selon le SGBD choisi): {{: | ||
- | |||
- | Utiliser le script choisi pour créer les tables: | ||
- | * soit dans le schéma public de la base postgres du serveur postgresql installé sur votre machine (rappel serveur: localhost, base: postgres, login: etudiant, mdp: etudiant) | ||
- | * soit dans votre compte Oracle (voir tomusss.univ-lyon1.fr pour le login) | ||
- | * dans ce cas, il sera nécessaire télécharger en plus le fichier [[http:// | ||
===== Projet embryonnaire ===== | ===== Projet embryonnaire ===== | ||
Ligne 27: | Ligne 62: | ||
Configurer Maven comme indiqué [[enseignement: | Configurer Maven comme indiqué [[enseignement: | ||
- | Télécharger et décompresser le projet de base: {{: | + | Télécharger et décompresser le projet de base: {{: |
+ | <code shell> | ||
+ | hg clone https:// | ||
+ | </ | ||
Un projet Maven possède deux répertoires de sources: src/main et src/test. Le premier contient les classes " | Un projet Maven possède deux répertoires de sources: src/main et src/test. Le premier contient les classes " | ||
Dans Eclipse, il faut importer le projet en utilisant '' | Dans Eclipse, il faut importer le projet en utilisant '' | ||
+ | |||
+ | <note warning> | ||
Le fichier '' | Le fichier '' | ||
- | Le fichier '' | + | Le fichier '' |
- | <note tip>Si vous utilisez Oracle, ces deux fichiers sont à modifier | + | ==== Schema relationnel ==== |
+ | |||
+ | Le fichier '' | ||
===== Travail demandé ===== | ===== Travail demandé ===== | ||
Ligne 43: | Ligne 85: | ||
- Concevoir un modèle objet correspondant au modèle relationnel fourni et créer des classes Java correspondantes. | - Concevoir un modèle objet correspondant au modèle relationnel fourni et créer des classes Java correspondantes. | ||
- Annoter les classes via des annotations du package '' | - Annoter les classes via des annotations du package '' | ||
+ | * Un début de classe Vin annoté peut servir de point de départ. | ||
+ | * Faire une énumération pour les couleurs de vin: rouge, rose, blanc.((c.f. '' | ||
+ | * Dans la mesure du possible, les associations devront être bidirectionnelles | ||
+ | * Dans le cas d' | ||
==== Remarques additionnelles ==== | ==== Remarques additionnelles ==== | ||
Ligne 48: | Ligne 94: | ||
=== Tester le mapping === | === Tester le mapping === | ||
- | Le mapping relationnel objet peut être tester à travers le [[: | + | Le mapping relationnel objet peut être tester à travers le [[: |
Cette classe est exécutable directement comme test JUnit dans Eclipse ou Netbeans. | Cette classe est exécutable directement comme test JUnit dans Eclipse ou Netbeans. | ||
=== Divers === | === Divers === | ||
- | * Lorsqu’une entité/ | + | * Lorsqu’une entité/ |
* Les annotations @Column, @JoinColumn, | * Les annotations @Column, @JoinColumn, | ||
* Changer '' | * Changer '' | ||
* L' | * L' | ||
- | * Classe Film sans association. On pourra | + | * Enum Couleur, à utiliser dans vin |
- | + | * Classes Appellation, | |
- | @Entity(name = " | + | * Association |
- | public class Film implements Serializable { | + | * Associations Vin <-> Appellation, |
- | private static final long serialVersionUID = 1L; | + | * Traitement de la composition des vins |
- | + | ||
- | @Id | + | |
- | @GeneratedValue(generator = " | + | |
- | @SequenceGenerator(sequenceName = " | + | |
- | private int id; | + | |
- | + | ||
- | private String titre; | + | |
- | + | ||
- | private int annee; | + | |
- | + | ||
- | public String getTitre() { | + | |
- | return titre; | + | |
- | } | + | |
- | + | ||
- | public void setTitre(String titre) { | + | |
- | this.titre = titre; | + | |
- | } | + | |
- | + | ||
- | public int getAnnee() { | + | |
- | return annee; | + | |
- | } | + | |
- | + | ||
- | public void setAnnee(int annee) { | + | |
- | this.annee = annee; | + | |
- | } | + | |
- | + | ||
- | public int getId() { | + | |
- | return id; | + | |
- | } | + | |
- | + | ||
- | + | ||
- | // Généré | + | |
- | @Override | + | |
- | public int hashCode() { | + | |
- | final int prime = 31; | + | |
- | int result = 1; | + | |
- | result = prime * result + annee; | + | |
- | result = prime * result + id; | + | |
- | result = prime * result + ((titre == null) ? 0 : titre.hashCode()); | + | |
- | return result; | + | |
- | } | + | |
- | + | ||
- | @Override | + | |
- | public boolean equals(Object obj) { | + | |
- | if (this == obj) | + | |
- | return true; | + | |
- | if (obj == null) | + | |
- | return false; | + | |
- | if (getClass() != obj.getClass()) | + | |
- | return false; | + | |
- | Film other = (Film) obj; | + | |
- | if (annee != other.annee) | + | |
- | return false; | + | |
- | if (id != other.id) | + | |
- | return false; | + | |
- | if (titre == null) { | + | |
- | if (other.titre != null) | + | |
- | return false; | + | |
- | } else if (!titre.equals(other.titre)) | + | |
- | return false; | + | |
- | return true; | + | |
- | } | + | |
- | } | + | |
- | </ | + | |
- | * Classe Personne | + | |
- | * Classe Societe sans association | + | |
- | * Association | + | |
- | * Association Société produit Film | + | |
- | * Classe Role ('' | + | |
- | * Associations liées à la classe Role | + | |