persistence.xml
. Il est cependant demandé de le faire fonctionner sur H2 pour faciliter le travail de correctionCeci est une ancienne révision du document !
Ce TP est à rendre pour le dimanche 28/09/2014.
On déposera une archive zip sur spiral:
Grp-Nom1-Numero1-Nom2-Numero2.zip
où:.zip
, .tar.gz
ou .7z
. Aucun autre format ne sera accepté.etudiants.properties
dont le contenu sera une mise à jour du suivant: groupe=X nom1=aaaaaa prenom1=bbbbbb numero1=1234567 nom2=cccccc prenom2=dddddd numero2=2345678
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.
L'objectif de ce TP est de mettre en place un mapping Objet/Relationnel via l'API JPA.
Quelques liens:
javax.persistence
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 en important le projet et en spécifiant d'utiliser un type de projet maven à l'import.
<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>
<note tip>Il est possible d'utiliser la ligne de commande plutot que l'IDE. Pour compiler et tester le mapping depuis le répertoire orm-2014
, faire:
mvn test
</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.
H2 est une base de donnée Java qui sera utilisée dans ce TP1). Télécharger et décompresser le fichier h2-2014-08-06.zip et lancer la console H2 à l'aide du fichier h2.sh
ou h2.bat
. Une page web s'ouvre. Utiliser la configuration Generic H2 (Server)
.
<note important>
Vérifier la configuration:
org.h2.Driver
jdbc:h2:tcp:localhost/~/test
* Nom d'utilisateur:
sa
* Mot de passe: vide
</note>
Tester la connexion, puis se connecter.
=== Mise en place du schéma ===
Le fichier
orm-2014/initialisation-h2.sql du projet embryonnaire permet de mettre en place le schéma relationnel dans la base H2. Utiliser la console H2 dans le navigateur pour mettre en place ce schéma.
<file sql initialisation-h2.sql>
create table cinema(
nom varchar(255) primary key,
adresse varchar(255) );
create table salle(
nom varchar(30) ,
cinema varchar(255) references cinema(nom),
capacite integer ,
primary key(cinema,nom) );
create table seance(
debut timestamp,
fin timestamp,
salle varchar(30),
cinema varchar(255),
film varchar(255),
foreign key (cinema,salle) references salle(cinema,nom),
primary key(cinema,salle,debut) );
create table client(
num_client integer primary key,
nom varchar(255));
create table reservation(
id integer primary key,
seance timestamp,
salle varchar(30) ,
cinema varchar(255) ,
quantite integer ,
client integer references client(num_client),
foreign key (cinema,salle,seance) references seance(cinema,salle,debut));
CREATE SEQUENCE hibernate_sequence
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
</file>
===== Travail demandé =====
- 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
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
* il est possible pour cela d'utiliser des type primitifs comme
int ou
String pour les champs qui sont des clés étrangères. Ces champ seront remplacés par des champs désignant des classes du modèle le moment venu (par exemple un champ
String cinema pourra plus tard être remplacé par un champ
Cinema cinema''
* Association Salle ↔ Cinema
* Association Seance ↔ Salle
* Associations Reservation ↔ Seance et Reservation ↔ Client
persistence.xml
. Il est cependant demandé de le faire fonctionner sur H2 pour faciliter le travail de correction