Différences

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

Lien vers cette vue comparative

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:2015 [2015/09/22 06:35]
ecoquery [Remarques additionnelles]
enseignement:tp:bd:tp-orm:2015 [2015/09/25 17:47] (Version actuelle)
rthion [Introduction]
Ligne 2: Ligne 2:
  
 Ce TP est à réaliser en binômes. Il est à rendre pour le **05/10/2015** via un projet forge (voir [[#rendu|la section Rendu]]). Ce TP est à réaliser en binômes. Il est à rendre pour le **05/10/2015** via un projet forge (voir [[#rendu|la section Rendu]]).
 +
 +=== Mises à jour de cette page===
 +
 +  * 22/10/2015: ajout @OrderColumn dans les remarques, exécution de l'application via maven
  
 === Evaluation === === Evaluation ===
Ligne 22: Ligne 26:
   * [[https://docs.oracle.com/javaee/7/api/|API JEE 7]] -> package ''javax.persistence''   * [[https://docs.oracle.com/javaee/7/api/|API JEE 7]] -> package ''javax.persistence''
   * [[http://en.wikipedia.org/wiki/Java_Persistence_API|JPA]]   * [[http://en.wikipedia.org/wiki/Java_Persistence_API|JPA]]
 +  * [[https://en.wikibooks.org/wiki/Java_Persistence|Wikibook sur JPA]]
   * [[https://www.hibernate.org/|Hibernate]]   * [[https://www.hibernate.org/|Hibernate]]
   * [[http://docs.oracle.com/javaee/7/tutorial/partpersist.htm#BNBPY|Tutoriel JPA]] en anglais   * [[http://docs.oracle.com/javaee/7/tutorial/partpersist.htm#BNBPY|Tutoriel JPA]] en anglais
Ligne 40: Ligne 45:
 Voir également le [[enseignement:tp:forge-maven|TP maven/forge]]. Voir également le [[enseignement:tp:forge-maven|TP maven/forge]].
  
-Télécharger et décompresser le projet de base: {{:enseignement:tp:bd:tp-orm:inf1018m-orm.zip|}} ou mieux le cloner depuis la forge+Si ce n'est déjà fait, créer un nouveau projet forge pour ce TP et le cloner. 
-<code shell+Récupérer ensuite dans ce dépôt local le contenu du projet de base: 
-hg clone https://forge.univ-lyon1.fr/hg/inf1018m-orm+<code sh
 +hg pull https://forge.univ-lyon1.fr/hg/inf1018m-orm 
 +hg update
 </code> </code>
 +
 +En cas de problème d'accès à la forge, télécharger et décompresser le {{:enseignement:tp:bd:tp-orm:inf1018m-orm.zip|projet de base}}  dans un autre répertoire. Effectuer ensuite depuis le dépôt de votre projet un ''hg pull xxx'' où xxx est le répertoire ou vous avez extrait l'archive téléchargée.
  
 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 49: Ligne 58:
 Dans Eclipse, il faut importer le projet en utilisant ''Import existing maven project''. Le projet peut être directement ouvert dans Netbeans/IntelliJ. Dans Eclipse, il faut importer le projet en utilisant ''Import existing maven project''. Le projet peut être directement ouvert dans Netbeans/IntelliJ.
  
-<note tip>Il est possible d'utiliser la ligne de commande plutôt que l'IDE. Pour compiler et tester le mapping depuis le répertoire du projet((à priori ''inf1018m-orm'')), faire:<code>mvn test</code></note>+<note tip>Il est possible d'utiliser la ligne de commande plutôt que l'IDE. Pour compiler et tester le mapping depuis le répertoire du projet((à priori ''inf1018m-orm'')), faire:<code>mvn test</code> 
 + 
 +Pour lancer l'application, faire (après avoir mis à jour votre dépôt via une des deux méthodes ci-dessus si vous avez commencé le TP lundi 21/09) <code>mvn exec:java</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 69: Ligne 81:
 </note> </note>
 Tester la connexion, puis se connecter. Tester la connexion, puis se connecter.
 +
 +<note warning>La console H2 peut avoir du mal à démarrer. Si le navigateur de s'ouvre pas: essayer de décompresser H2 sur le disque local dans ''C:\Temp'' ou dans ''/tmp''. Si le navigateur s'ouvre mais n'affiche rien, changer l'adresse IP (avant le '':8082'') en ''localhost''.</note>
  
 === Mise en place du schéma === === Mise en place du schéma ===
Ligne 143: Ligne 157:
 === Annotations de mapping === === Annotations de mapping ===
  
-  * 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'',''@IdClass''. Voir également ''@ElementCollection''/''@CollectionTable''/''@OrderColumn'' si les éléments de la collection ne sont pas des entités.+  * 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'',''@IdClass''. Voir également ''@ElementCollection''/''@CollectionTable'' si les éléments de la collection ne sont pas des entités.
   * Les annotations ''@Column'', ''@JoinColumn'', ''@JoinColumns'' peuvent être dans le mapping   * Les annotations ''@Column'', ''@JoinColumn'', ''@JoinColumns'' peuvent être dans le mapping
   * Avec le paramètre ''mappedBy'', il est possible d'utiliser une valeur du type ''maCle.unChamp'' pour indiquer que la relation inverse est référencée à partir d'un champ dans une clé composée (i.e. en présence de ''@Embbedable''/''@EmbbeddedId''/''@IdClass'').   * Avec le paramètre ''mappedBy'', il est possible d'utiliser une valeur du type ''maCle.unChamp'' pour indiquer que la relation inverse est référencée à partir d'un champ dans une clé composée (i.e. en présence de ''@Embbedable''/''@EmbbeddedId''/''@IdClass'').
   * L'annotation ''@Lob'' peut être utilisée pour les champs contenant de grandes données (type TEXT, CLOB ou BLOB).   * L'annotation ''@Lob'' peut être utilisée pour les champs contenant de grandes données (type TEXT, CLOB ou BLOB).
 +  * L'annotation ''@OrderColumn'' peut être utilisée pour spécifier l'ordre dans une liste.
   * Dans le fichier ''persistence.xml'', 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.    * Dans le fichier ''persistence.xml'', 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. 
  
Ligne 154: Ligne 169:
  
 D'autres méthodes d' ''EntityManager'' seront utiles, comme ''find'', ''merge'', ''persist'' de la classe ''[[https://docs.oracle.com/javaee/7/api/index.html?javax/persistence/EntityManager.html|EntityManager]]'' D'autres méthodes d' ''EntityManager'' seront utiles, comme ''find'', ''merge'', ''persist'' de la classe ''[[https://docs.oracle.com/javaee/7/api/index.html?javax/persistence/EntityManager.html|EntityManager]]''
 +
 +