Les relations d’héritage

Support des relations d’héritage

Le module Hibernate Designer supporte les relations d’héritages entre classes persistantes. Nous traitons quatre stratégies de mapping d’héritages offertes par Hibernate :

  • une table par hiérarchie de classe
  • une table par classe fille et sa variante utilisant un discriminant
  • une table par classe concrète
  • une table par classe concrète utilisant le polymorphisme implicite

Le type de  mapping appliqué à un héritage donné peut être paramétré au niveau de l’onglet de propriété Hibernate du lien d’héritage.

Une table par hiérarchie de classe

En utilisant cette stratégie, l’ensemble des classes persistantes de l’arbre d’héritage est mappé sur une seule table du modèle SQL.

Contraintes au niveau du modèle de persistance :

  • Seule la classe persistante parente déclare un identifiant. Les classes filles doivent en être dépourvues.
  • Toutes les propriétés des classes ne peuvent avoir de contraintes Not Null.
  • Les propriétés Discriminator Column, Discriminator Column Type et Discriminator Value doivent entre renseignées au niveau de la classe parente.

Contraintes au niveau du modèle SQL :

  • La table SQL doit posséder un champ pour chacune des Property déclarées par les classes persistantes de arbre d’héritage.
  • La table SQL doit posséder un champ supplémentaire pour le discriminant.
  • Les champs de la table SQL ne peuvent avoir la contrainte Not Null.

Une table par classe fille

En utilisant cette stratégie, chacune des classes persistantes de l’arbre d’héritage est mappée sur une table du modèle SQL.

Contraintes au niveau du modèle de persistance :

  • Seule la classe persistante parente déclare un identifiant. Les classes filles doivent en être dépourvues.

Contraintes au niveau du modèle SQL :

  • Les tables des classes filles ont une clé primaire associée à la table classe mère (le modèle relationnel est une association un-vers-un).

Le module Hibernate Designer supporte une variante de cette stratégie : une table par classe fille, en utilisant un discriminant qui entraîne les contraintes suivantes :

  • Les Propriétés Discriminator Column, Discriminator Column Type et Discriminator Value doivent entre renseignées au niveau de la classe parente.
  • La table SQL correspondant à la classe persistante parente doit posséder une colonne pour le discriminant.

Une table par classe concrète

En utilisant cette stratégie, chacune des classes persistantes non abstraites de l’arbre d’héritage est mappée sur une table du modèle SQL.

Contraintes au niveau du modèle de persistance :

  • Seule la classe persistante parente déclare un identifiant. Les classes filles doivent en être dépourvues.

Contraintes au niveau du modèle SQL :

  • Chaque table SQL définit des colonnes pour toutes les propriétés de la classe, incluant les propriétés héritées.
  • Le nom de la colonne correspondant à Property doit être le même pour toutes les classes filles.

Une table par classe concrète, en utilisant le polymorphisme implicite

Une variante de la stratégie précédente, chacune des classes persistantes non abstraites de l’arbre d’héritage est mappée sur une table du modèle SQL.

Contraintes au niveau du modèle de persistance :

  • Toutes les classes persistantes de l’arbre d’héritage doivent déclarer le même identifiant.

Contraintes au niveau du modèle SQL :

  • Chaque table SQL définit des colonnes pour toutes les propriétés de la classe, incluant les propriétés héritées.
  • Le nom de la colonne correspondant à Property doit être le même pour toutes les classes filles.