Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
enseignement:tp:bd:tp-orm:2014 [2014/09/18 11:47]
ecoquery créée
enseignement:tp:bd:tp-orm:2014 [2014/09/22 07:03]
ecoquery [Base de donnée et schema relationnel]
Ligne 37: Ligne 37:
  
  
-<note warning>Sur les machines des salles  TP, faire le TP sous Windows (les IDE sont mal installées sous linux)</note> 
  
 ===== Introduction ===== ===== Introduction =====
Ligne 63: Ligne 62:
 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. 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.+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 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:<code>mvn test</code></note>
  
 Le fichier ''pom.xml'' contient les dépendances sur les bibliothèques nécessaires au TP. Le fichier ''pom.xml'' contient les dépendances sur les bibliothèques nécessaires au TP.
Ligne 71: Ligne 71:
 Le fichier ''src/main/resources/META-INF/persistence.xml'' contient les informations pour mettre en place le cadre de persistance. 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 PostgreSQL((pour les bases postgres des salles TP: login ''etudiant'', mot de passe ''etudiant'')).+==== Base de donnée et schema relationnel ====
  
 +=== Installation et démarrage de la base H2 ===
 +
 +[[http://h2datadase.com|H2]] est une base de donnée Java qui sera utilisée dans ce TP((Le TP fonctionne aussi sous d'autres SGBD comme PostgreSQL à condition d'adapter le fichier ''persistence.xml''. Il est cependant demandé de le faire fonctionner sur H2 pour faciliter le travail de correction)). Télécharger et décompresser le fichier [[http://liris.cnrs.fr/~ecoquery/files/h2-2014-08-06.zip|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:
 +  * Pilote JDBC: ''org.h2.Driver''
 +  * URL JDBC: ''<nowiki>jdbc:h2:tcp://localhost/~/test</nowiki>''
 +  * 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é ===== ===== Travail demandé =====
  
Ligne 96: Ligne 153:
   * L'ordre suivant est suggéré dans la mise en place des classes et du mapping:   * 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     * 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 Salle <-> Cinema
     * Association Seance <-> Salle     * Association Seance <-> Salle
     * Associations Reservation <-> Seance et Reservation <-> Client     * Associations Reservation <-> Seance et Reservation <-> Client