vers l'accueil formulaire de contact

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

Votre formation HIBERNATE avec Objis, spécialiste formation java depuis 2005 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.

PNG - 6.8 ko
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.

PNG - 24.3 ko
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 ?

PNG - 5 ko
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 ?

PNG - 4.9 ko
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.

PNG - 10.3 ko
tutoriel-hibernate-objis-mapping-heritage-3

- Analysez le code de la classe FormationInter

PNG - 20.8 ko
tutoriel-hibernate-objis-mapping-heritage-4

- Analysez le code de la classe FormationIntra

PNG - 24.8 ko
tutoriel-hibernate-objis-mapping-heritage-5

Partie 3 : Persistance de l’héritage

- Expliquez le code ci-dessous

PNG - 33 ko
tutoriel-hibernate-objis-mapping-heritage-7

- Analysez la partie de Log Hibernate suite au chargement.

PNG - 14.5 ko
tutoriel-hibernate-objis-mapping-heritage-6

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

PNG - 13.1 ko
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

PNG - 27 ko
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 :

PNG - 17.2 ko
tutoriel-hibernate-une-table-par-sous-classe-2

- Expliquez

PNG - 17.1 ko
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.

Pour aller plus loin

- Si vous appréciez notre sens du partage, devenez membre ’classic’ du Club Objis.
- Accélérez significativement votre maîtrise d’Hibernate avec un coach Objis : devenez membre Silver / Gold du Club Objis.