Hibernate:Relation plusieurs-à-plusieurs avec propriétés de jointure dans une map
De WIKI.minetti.org
Sommaire
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; ... }