Mettez en œuvre une relation d’héritage hibernate. Parmi les 3 techniques disponibles, maîtrisez la stratégie ‘une table par hiérarchie’. Découvrez le paramétrage statique des classes héritées via la balise ‘subclass’. Analysez le comportement dynamique et la persistance de classes héritées. Comprenez les autres techniques d’héritage : une table par classe concrète et une table par sous-classe.
Objis, spécialiste de la formation Java, est heureux de vous offrir ce
tutoriel, extrait de séances pratiques de la formation HIBERNATE dispensée par Objis.
Les + objis
70% de travaux pratiques
Clé USB avec tous les outils utilisés + Corrigés TPs
Bilan pédagogique individuel + conseils
Prérequis, outils et versions
Tutoriel Hibernate N°2 : votre première application hibernate
Liens utiles
+ de 100 tutoriaux java/jee Objis
Tutoriaux HIBERNATE Objis
Objis, spécialiste formation java depuis 2005
Site hibernate (javadoc, faq)
Documentation (chap. 9) : mapping héritage
Forme normale
Héritage avec Hibernate (developpez.com)
Objectifs
Comprendre les logs générés par Hibernate
Analysez certaines configurations par défaut.
Programme
Contexte
Partie 1 : configuration fichier de mapping
Partie 2 : classes Java
Partie 3 : Persistance de l’héritage
Durée
30 min.
Contexte
Vous devez modéliser une relation d’héritage.
Une formation Intra Entreprise est une formation destinée aux collaborateurs d’une seule entreprise. Un des éléments contribuant à la réussite d’une telle formation est son niveau de personnalisation (par exemple des supports de cours, en fonction de problématique client).
Une relation inter Entreprise est une formation qui implique des participants issus de plusieurs sociétés. Une des caractéristiques est donc le nombre d’entreprises représentées.
Hibernate va nous permettre de modéliser cette relation d’héritage.
Partie 1 : Configuration Mapping héritage
Configuration clé N°1
Analysez le mapping de la classe Formation. La partie surlignée (balises ‘subclass’) est spécifique à la relation d’héritage. Les autres configuration (mapping collections, mapping d’association Many-to-one) ont été analysés dans les tutoriaux hibernate précédents.
Configuration clé N°2
Observez dans ce mapping la déclaration de la classe Formation. En particulier l’attribut ‘discriminator-value’. A quoi sert t’il ?
Configuration clé N°3
Observez dans ce mapping la déclaration de de l’élément ‘discriminator’. A quoi sert t’il ?
Partie 2 : Classes Java
Ci-dessous les éléments ajoutés par rapport au projet. Ce sont les classes java héritées de Formation.
Analysez le code de la classe FormationInter
Analysez le code de la classe FormationIntra
Partie 3 : Persistance de l’héritage
Expliquez le code ci-dessous
Analysez la partie de Log Hibernate suite au chargement.
Analysez le résultat suivant (base de données HSQLDB)
Expliquez
Avantages et inconvénients
Cas d’utilisation
Si :
— vous avez besoin d’une association polymorphique (association à une superclasse et donc à toutes les classes dans la hiérarchie) ou de requêtes polymorphiques,
— les sous classes déclarent peu de propriétés
alors les concepteurs d’hibernate préconisent le choix d’e cette stratégie (une table par hiérarchie)
Avantages
Cette stratégie est efficace en terme de performance et de simplicité. Elle correspond à la stratégie la plus efficace pour représenter le polymorphisme.
Inconvénient
Les colonnes pour les propriétés déclarées par des sous-classes doivent être déclarées comme pouvant accepter des valeurs nulles. Si ce n’est pas le cas la perte des contraintes NOT NULL peu poser des problèmes d’intégrité.
Partie 4 : une table par classe concrète
Mettez en oeuvre la stratégie ‘une table par classe concrète’, dans laquelle on utilise exactement une table pour chaque classe (non abstraite). Toutes les propriétés (dont les propriétés d’héritage) des classes FormationInter et FormationIntra sont alors mappées sur des colonnes des tables Formation_INTER et Formation_INTRA.
QUESTION 1 : Est t’il possible de représenter une relation entre Formation (ici classe abstraite) et FormationInter par une clé étrangère ?
QUESTION 2 : Comment gérer relation entre un lieu et une formationInter ?
Montrez que cette stratégie ne supporte pas bien les associations polymorphiques.
Partie 4 : une table par sous classe
Expliquez
Requêtes polymorphiques
Les requêtes Hibernate peuvent nommer n’importe quelle classe ou interface Java dans la clause from. La requête retournera les instances de toutes les classes persistantes qui étendent cette classe ou implémente cette interface. La requête suivante retournera tous les objets persistants :
Expliquez
Expliquez
Montrez que cette stratégie, contrairement à la précédente, supporte bien les associations polymorphiques et les requêtes polymorphes.
Conclusion
Vous avez mis en œuvre une des 3 techniques de mise en œuvre de l’héritage avec Hibernate : une table par hiérarchie.
Toute notre équipe se réjouis d’avoir pu contribuer à élever votre niveau d’expertise Hibernate.