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
enseignement:tp:bd:tp-orm:2012 [2012/10/14 16:37]
ecoquery créée
enseignement:tp:bd:tp-orm:2012 [2012/10/17 12:41] (Version actuelle)
ecoquery [Modalités de rendu]
Ligne 3: Ligne 3:
 ===== Modalités de rendu ===== ===== Modalités de rendu =====
  
-  * Ce TP sera à rendre pour le **dimanche 21/10/2012** par dépôt sur la page Spiral suivante: [[http://spiralconnect.univ-lyon1.fr/spiral/spiral.html#/activities/goto_folder/1837569|Zone de dépôt]]. +  * Ce TP sera à rendre pour le **dimanche <del>21/10/2012</del> 28/10/2012** par dépôt sur la page Spiral suivante: [[http://spiralconnect.univ-lyon1.fr/spiral/spiral.html#/activities/goto_folder/1837569|Zone de dépôt]]. 
   * Il est demandé de rendre un zip du projet maven, sans le répertoire ''target''. Bien penser à remplir le fichier ''etudiants.txt''. Il est possible d'ajouter dans ce fichier tout commentaire à destination du correcteur.   * Il est demandé de rendre un zip du projet maven, sans le répertoire ''target''. Bien penser à remplir le fichier ''etudiants.txt''. Il est possible d'ajouter dans ce fichier tout commentaire à destination du correcteur.
   * Un rendu par binôme, trinômes interdits.   * Un rendu par binôme, trinômes interdits.
Ligne 22: Ligne 22:
 ===== Schema relationnel ===== ===== Schema relationnel =====
  
-On considère le schéma relationnel fourni dans un des fichiers suivants (selon le SGBD choisi): {{|schema PostgreSQL}}, {{|schema Oracle}}+On considère le schéma relationnel fourni dans un des fichiers suivants (selon le SGBD choisi): {{:enseignement:tp:bd:tp-orm:mif18-2012-postgres.sql|schema PostgreSQL}}, {{:enseignement:tp:bd:tp-orm:mif18-2012-oracle.sql|schema Oracle}}
  
 Utiliser le script choisi pour créer les tables: Utiliser le script choisi pour créer les tables:
Ligne 32: Ligne 32:
  
 Maven est un utilitaire de compilation/exécution/test de projet Java qui sera utilisé dans le cadre des TP de l'UE. 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é [[:enseignement:aide:start#maven|dans l'aide]].+Configurer Maven comme indiqué [[enseignement:aide:logiciels#maven|dans l'aide]].
  
-Télécharger et décompresser le projet de base: {{:enseignement:bdav:bdav-tp-orm-base.zip|bdav-tp-orm-base.zip}}, ou mieux, cloner le dépôt créé mardi matin. +Télécharger et décompresser le projet de base: {{:enseignement:tp:bd:tp-orm:mif18-tp-orm-base.zip|bdav-tp-orm-base.zip}}.
- +
-<code shell> +
-hg clone https://forge.univ-lyon1.fr/hg/mif18-tp-base +
-</code>+
  
 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.
Ligne 46: Ligne 42:
 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.
  
-Le fichier ''src/main/resources/META-INF/persistence.xml'' contient les informations pour mettre en place le cadre de persistence+Le fichier ''src/main/resources/META-INF/persistence.xml'' contient les informations pour mettre en place le cadre de persistence.
-<code xml> +
-<?xml version="1.0" encoding="UTF-8"?> +
-<persistence xmlns="http://java.sun.com/xml/ns/persistence" +
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +
-   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" +
-   version="1.0"> +
-    <persistence-unit name="pu" transaction-type="RESOURCE_LOCAL"> +
-        <provider>org.hibernate.ejb.HibernatePersistence</provider> +
-        <properties> +
-            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> +
-            <property name="hibernate.hbm2ddl.auto" value="validate"/> +
-            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> +
-            <property name="hibernate.connection.username" value="etudiant"/>  +
-            <property name="hibernate.connection.password" value="etudiant"/>  +
-            <property name="hibernate.connection.url" value="jdbc:postgresql:postgres"/>  +
-        </properties> +
-    </persistence-unit> +
-</persistence> +
-</code>+
  
-Si la connection de fonctionne paschanger ''mdpetu'' en ''etudiant''.+<note tip>Si vous utilisez Oracleces deux fichiers sont à modifier en suivant les commentaires qui sont dedans.</note>
  
 ===== Travail demandé ===== ===== Travail demandé =====
Ligne 78: Ligne 55:
 === Tester le mapping === === Tester le mapping ===
  
-Le mapping relationnel objet peut être tester à travers le [[:enseignement:aide:apis#junit|TestCase JUnit]] suivant: +Le mapping relationnel objet peut être tester à travers le [[:enseignement:aide:apis#junit|TestCase JUnit]] placé dans ''src/test/java/bdav/orm/MappingTest.java''
-<code java> +Cette classe est exécutable directement comme test JUnit dans Eclipse ou Netbeans. 
-package bdav.tporm+ 
-  +=== Divers === 
-import javax.persistence.EntityManager+  * 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''
-import javax.persistence.Persistence+  * 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. 
-import junit.framework.TestCase+  * L'ordre suivant est suggéré dans la mise en place des classes et du mapping
-  +    * Classe Film sans association. On pourra utiliser/s'inspirer du code suivant:<code java> 
-public class ConfigurationTest extends TestCase + 
-  +@Entity(name = "film"
- public void testEntityManager() { +public class Film implements Serializable { 
- EntityManager em Persistence.createEntityManagerFactory("pu").createEntityManager(); + private static final long serialVersionUID = 1L
- em.getTransaction().begin(); + 
- em.getTransaction().commit(); + @Id 
-                em.close();+ @GeneratedValue(generator = "film_gen", strategy = GenerationType.SEQUENCE) 
 + @SequenceGenerator(sequenceName = "film_seq", name = "film_gen"
 + 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é dans Eclipse via "Source-> "Generate hashCode and equals ..." 
 + @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;
  }  }
-  
 } }
 </code> </code>
-Cette classe est à placer dans le répertoire ''src/test/java/bdav/tporm''. Elle est exécutable directement comme test JUnit dans Eclipse ou Netbeans. +    * Classe Personne sans association 
-=== Divers === +    Classe Societe sans association 
-  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 ''@Id'', ''@IdClass''. +    Association Film réalisé par Personne 
-  Lorsque certaines tables ne correspondent pas nécessairement à une entité, il est possible d'utiliser les annotations ''@Embedded'' et ''@Embeddable''. +    Association Société produit Film 
-  Les colonnes de type xml peuvent être mise en correspondance avec des colonnes de type String +    Classe Role (''joue_dans'') sans association 
-  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.+    * Associations liées à la classe Role