Ceci est une ancienne révision du document !


Mise en oeuvre de mappings Objet/Relationnels

Rendu

Ce TP est à rendre pour le dimanche 28/09/2014.

On déposera une archive zip sur spiral:

  • le nom du fichier sera de la forme Grp-Nom1-Numero1-Nom2-Numero2.zip où:
    • Grp est le groupe de TD: 1,2 ou 3
    • Nom1 est le nom du premier étudiant du binôme, Nom2 celui du deuxième étudiant.
    • Numero1 est le numéro d'étudiant du premier étudiant du binôme, Numéro2 celui du deuxième.
    • Il est possible de rendre une archive .zip, .tar.gz ou .7z. Aucun autre format ne sera accepté.
  • L'archive contiendra
    • Le projet fourni mis à jour par vos soins pour répondre au travail demandé.
    • Un fichier etudiants.properties dont le contenu sera une mise à jour du suivant:
      etudiants.properties
      groupe=X
      nom1=aaaaaa
      prenom1=bbbbbb
      numero1=1234567
      nom2=cccccc
      prenom2=dddddd
      numero2=2345678
  • Il est demandé (avant de faire l'archive) de:
    • 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, cf tp maven/forge)
  • L'archive est à déposer avant la date limite (dimanche 28/09/2014) sur spiral ici: http://spiralconnect.univ-lyon1.fr/webapp/activities/activities.jsp?containerId=3566315
  • Il est fortement recommandé de tester que l'accès fonctionne avant le weekend afin de ne pas être coincé pour le rendu
    • 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'indiquer sa signification.

Le non respect des consignes de rendu entrainera une sanction sur la note du TP.

Remarques diverses

<note warning>Sur les machines des salles TP, faire le TP sous Windows (les IDE sont mal installées sous linux)</note>

Introduction

L'objectif de ce TP est de mettre en place un mapping Objet/Relationnel via l'API JPA.

Quelques liens:

Projet embryonnaire

Maven est un utilitaire de compilation/exécution/test de projet Java qui sera utilisé dans le cadre des TP de l'UE. Configurer Maven comme indiqué dans l'aide.

Télécharger et décompresser le projet de base: mif18-2014-base.zip, ou mieux le cloner depuis la forge:

hg clone https://forge.univ-lyon1.fr/hg/inf1008m-2014-base mif18-2014-base

Un projet Maven possède deux répertoires de sources: src/main et src/test. Le premier contient les classes “métier” alors que le second ne contient que le code de test.

Dans Eclipse, il faut importer le projet en utilisant Import existing maven project. Le projet peut être directement ou vert dans Netbeans. Il est également possible d'utiliser IntelliJ.

<note warning>Le projet à utiliser est le projet orm-2014, disponible soit directement, soit le cas échéant dans les modules du projet ouvert</note>

Le fichier pom.xml contient les dépendances sur les bibliothèques nécessaires au TP.

Le fichier src/main/resources/META-INF/persistence.xml contient les informations pour mettre en place le cadre de persistance.

Schema relationnel

Le fichier orm-2014/initialisation-pg.sql du projet embryonnaire permet de mettre en place le schéma relationnel avec quelques données dans la base PostgreSQL1).

Travail demandé

  1. Concevoir un modèle objet correspondant au modèle relationnel fourni et créer des classes Java correspondantes.
  2. Annoter les classes via des annotations du package javax.persistence, afin d'établir les liens entre le modèle relationnel et votre modèle objet.
    • Un début de classe Cinema annoté peut servir de point de départ.
    • Dans la mesure du possible, les associations devront être bidirectionnelles
      • Dans le cas d'associations bidirectionnelles, la cohérence des informations en mémoire devra être garantie.

Remarques additionnelles

Tester le mapping

Le mapping relationnel objet peut être tester à travers le TestCase JUnit placé dans src/test/java/mif18/orm/MappingTest.java. Cette classe est exécutable directement comme test JUnit dans Eclipse, Netbeans ou IntelliJ.

Divers

  • Lorsqu’une entité/classe possède un identifiant portant sur plusieurs attributs, il faut créer une classe spécifique (qui n'est pas une entité) pour regrouper ces champs, et utiliser un champ de cette classe en lieu et place du groupe de champs servant d'identifiants dans votre modèle objet. Voir @EmbeddedId, @Embbedable. Voir également @ElementCollection si les éléments de la collection ne sont pas des entités.
  • Les annotations @Column, @JoinColumn, @JoinTable sont à utiliser dans le mapping
  • Changer hibernate.hbm2ddl.auto de validate à update permet au framework de modifier le schéma relationnel. Cela peut être utile pour comprendre à quoi correspond le mapping en cours de développement, mais cela écrase le schéma de l'énoncé. A la fin du TP, le mapping doit fonctionner avec le schéma de fourni plus haut. En cas d'impossibilité, justifier les différences dans des commentaires appropriés dans les classes Java.
  • L'ordre suivant est suggéré dans la mise en place des classes et du mapping:
    • Classes Salle, Seance, Client, Reservation sans traiter les associations
    • Association Salle ↔ Cinema
    • Association Seance ↔ Salle
    • Associations Reservation ↔ Seance et Reservation ↔ Client
1)
pour les bases postgres des salles TP: login etudiant, mot de passe etudiant