Hibernate:Relation plusieurs-à-plusieurs avec propriétés de jointure dans une map

De WIKI.minetti.org
Aller à : navigation, rechercher

But

Lier deux objets A et B:

  • L'objet A contient une liste d'objets B;
  • L'objet B ne comporte aucun lien vers l'objet A, mais chaque objet B est lié à un ou plusieurs objet A.

Au niveau de la base de données on va avoir une table de jointure qui va faire le lien entre la table de l'objet A et celle de l'objet B.

Chaque association entre un objet A et B comporte des propriétés, appelées propriétés de jointure. Ces propriétés seront mises dans la liste d'objets B qui en faîte sera une map avec comme clé l'objet B et comme valeur un objet embarqué contenant les propriétés de jointure.

Diagramme de classe

TODO

Tables

TODO

Annotations

Relation de la classe A:

@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name="JOINTURE_AB", joinColumns=@JoinColumn(name="A_ID"))
@MapKeyJoinColumn(name="B_ID")
@Embedded
@ForeignKey(name="FK_JOINTURE_AB_A")
private Map<B, JointureAB> bMap = new HashMap<>();

Objet embarqué:

@Embeddable
public class JointureAB {

  @Column(name="prop_1")
  private Integer prop1 = null;

  @Column(name="prop_2")
  private Integer prop2 = null;

  ...

}