Hibernate exemple d’héritage

Dans certains cas il n'est pas utile de créer plusieurs objets (et tables) sachant que l'objet est exactement le même et que d'un point de vue métier cela a un sens.

Dans cet article nous allons voir comment mettre en place un héritage où les classes filles n'ont pas d'attributs supplémentaires.

Nous allons voir un exemple avec Moe et Moa.

Soit une classe MoeMoa :

@Entity
 @Table(name = "moe_moa")
 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
 @DiscriminatorColumn(name = "type_mo", discriminatorType = DiscriminatorType.STRING)
 @DiscriminatorValue("MOAMOE")
 @SequenceGenerator(name = "id_sequence_generator", sequenceName = "moe_moa_seq", allocationSize = 1)
 @AttributeOverride(name = "id", column = @Column(name = "id_mo"))
 public abstract class MoeMoa
 extends CommonEntity {
private static final long serialVersionUID = -9165031531097030377L;
@Column(name = "organisme")
private String organisme;
@Column(name = "nom_prenom")
private String nomPrenom;
@Column(name = "email")
private String email;
@ManyToOne
@JoinColumn(name = "id_roles", nullable = false)
private Role role;
}

CommonEntity ne contient que les attributs d'id et de version, j'ai volontairement masqué les getteurs et setteurs pour plus de lisibilité.

Nous avons choisi de n'utiliser qu'une seule table et donc de passer par un discriminant qui dans cet exemple prendra la valeur de MOE ou MOA.

Soit la classe fille Moe :

@Entity 
@DiscriminatorValue("MOE") 
public class Moe extends MoeMoa {
private static final long serialVersionUID = 7974948521017022586L;
}

Dans la classe fille, il suffit de mettre une valeur au discriminator. Nous pouvons ensuite utiliser ces objets de manière classique avec hibernate.

2 commentaires

  1. Est-ce que l’article vient à la suite d’un autre car je ne comprends pas le fonctionnement. Pourrais-tu détailler ?

  2. L’article ne viens pas à la suite d’un autre, mais dans le contexte de la création des entités métiers lors du démarrage d’un projet.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.