如何在不将其映射为实体的情况下使用Hibernate进行三元关联?

时间:2019-01-17 14:54:19

标签: java hibernate java-ee orm

我正在尝试使用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)
);

谢谢!

0 个答案:

没有答案