Как работать с троичной ассоциацией, используя Hibernate, не отображая ее как сущность? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь использовать троичную связь между тремя сущностями, которые я сопоставил с Hibernate. Но я не знаю, как отобразить атрибуты этой сущности, используя эту связь.

Я хочу избежать отображения этой таблицы ассоциации как новой сущности.

У нас есть роли (RefRolesMission), обязанности (RefResponsabilitesMission) и уровни (RefNiveauxResponsabiliteMission). Каждая Роль имеет один или несколько Уровней для каждой Обязанности.

Роль сущности:

@Entity
@Table(name = "REF_ROLES_MISSION")
public class RefRolesMission extends AbstractEntity {

    private Integer id;
    private String libelle;

    // I correctly initialize this attribute but I would also like to have access to the levels of these responsibilities.
    private Set<RefResponsabilitesMission> responsabilites;

    // It is this attribute that I wish I could initialize, but is it possible?
    private Map<RefResponsabilitesMission, Set<RefNiveauxResponsabiliteMission>> responsabilitesNiveaux;

    @Id
    @GeneratedValue
    @Column(name = "REF_ROL_MIS_ID")
    public Integer getId() {
        return this.id;
    }

    @Column(name = "REF_ROL_MIS_LIBELLE")
    public String getLibelle() {
        return this.libelle;
    }

    @ManyToMany(fetch = FetchType.LAZY, targetEntity = RefResponsabilitesMission.class)
    @JoinTable(name = "RESPONSABILITES_MISSION", joinColumns = {
            @JoinColumn(name = "RES_MIS_ROLE") }, inverseJoinColumns = { @JoinColumn(name = "RES_MIS_RESPONSABILITE") })
    public Set<RefResponsabilitesMission> getResponsabilites() {
        return responsabilites;
    }

    // ...

}

Другие две сущности похожи. У них просто есть идентификатор и метка.

Из роли я стремлюсь получить доступ к его обязанностям, а затем к уровням его обязанностей. Как это сделать?

Моя таблица троичной ассоциации:

CREATE TABLE RESPONSABILITES_MISSION (
    RES_MIS_ROLE TINYINT, // Role ID
    RES_MIS_RESPONSABILITE TINYINT, // Responsability ID
    RES_MIS_NIVEAU TINYINT, // Level ID
    CONSTRAINT fk_res_mis_role_id FOREIGN KEY (RES_MIS_ROLE) REFERENCES REF_ROLES_MISSION(REF_ROL_MIS_ID),
    CONSTRAINT fk_res_mis_responsabilite_id FOREIGN KEY (RES_MIS_RESPONSABILITE) REFERENCES REF_RESPONSABILITES_MISSION(REF_RES_MIS_ID),
    CONSTRAINT fk_res_mis_niveau_id FOREIGN KEY (RES_MIS_NIVEAU) REFERENCES REF_NIVEAUX_RESPONSABILITE_MISSION(REF_NIV_RES_MIS_ID),
    PRIMARY KEY(RES_MIS_ROLE, RES_MIS_RESPONSABILITE, RES_MIS_NIVEAU)
);

Спасибо!

...