Tutoriel Hibernate N°6 : mapping d’héritage avec hibernate

////Tutoriel Hibernate N°6 : mapping d’héritage avec hibernate

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.

tutoriel-hibernate-objis-mapping-heritage-0

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.

tutoriel-hibernate-objis-mapping-heritage-1

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 ?

tutoriel-hibernate-objis-mapping-heritage-2

Configuration clé N°3

 Observez dans ce mapping la déclaration de de l’élément ‘discriminator’. A quoi sert t’il ?

tutoriel-hibernate-objis-mapping-heritage-2bis

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.

tutoriel-hibernate-objis-mapping-heritage-3

 Analysez le code de la classe FormationInter

tutoriel-hibernate-objis-mapping-heritage-4

 Analysez le code de la classe FormationIntra

tutoriel-hibernate-objis-mapping-heritage-5

Partie 3 : Persistance de l’héritage

 Expliquez le code ci-dessous

tutoriel-hibernate-objis-mapping-heritage-7

 Analysez la partie de Log Hibernate suite au chargement.

tutoriel-hibernate-objis-mapping-heritage-6

 Analysez le résultat suivant (base de données HSQLDB)

tutoriel-hibernate-objis-mapping-heritage-8

 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

tutoriel-hibernate-une-table-par-sous-classe-1

 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 :

tutoriel-hibernate-une-table-par-sous-classe-2

 Expliquez

tutoriel-hibernate-une-table-par-sous-classe-3

 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.

2018-01-27T16:48:52+01:00

Contactez nous

241 rue DUGUESCLIN, 69003 Lyon

Web : Objis : spécialiste formation Java