Les deux révisions précédentes
Révision précédente
Prochaine révision
|
Révision précédente
Dernière révision
Les deux révisions suivantes
|
enseignement:tp:bd:tp-orm:2015 [2015/09/21 06:51] ecoquery [Mise en oeuvre de mappings Objet/Relationnels] |
enseignement:tp:bd:tp-orm:2015 [2015/09/25 17:47] rthion [Introduction] |
====== Mise en oeuvre de mappings Objet/Relationnels ====== | ====== Mise en oeuvre de mappings Objet/Relationnels ====== |
| |
Ce TP est à réaliser en binômes. | 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 === |
* [[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 |
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. |
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. |
</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 === |
- Annoter les classes via JPA. Ci-dessous, une suggestion d'ordre pour compléter ces classes | - Annoter les classes via JPA. Ci-dessous, une suggestion d'ordre pour compléter ces classes |
* Classe ''Ingredients'' | * Classe ''Ingredients'' |
* Classe ''Recette'' dans les quantités ni les instructions. | * Classe ''Recette'' sans les quantités ni les instructions. |
* Liste d'instructions de la classe ''Recette'' et classe ''Instruction''. Remarque: cette classe n'a pas vocation à être une entité à part-entière. | * Liste d'instructions de la classe ''Recette'' et classe ''Instruction''. Remarque: cette classe n'a pas vocation à être une entité à part-entière. |
* Classe ''Quantite'': bien réfléchir aux clés/identifiants et aux associations de cette classe. | * Classe ''Quantite'': bien réfléchir aux clés/identifiants et aux associations de cette classe. |
* 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. |
| |
| |
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]]'' |
| |
| |
| |