Java 使用3级子类休眠多对多映射

Java 使用3级子类休眠多对多映射,java,hibernate,mapping,subclass,Java,Hibernate,Mapping,Subclass,我有下面的UML图 由于它是一个多个关系,我需要三个表来存储数据: CREATE TABLE Users( idObj BIGINT NOT NULL PRIMARY KEY, nome VARCHAR(100), nomeUtente VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL ); CREATE TABLE Works( id

我有下面的UML图

由于它是一个多个关系,我需要三个表来存储数据:

CREATE TABLE Users(
    idObj BIGINT NOT NULL PRIMARY KEY,
    nome VARCHAR(100),
    nomeUtente VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL,
    email VARCHAR(50) NOT NULL
);

CREATE TABLE Works(
    idObj BIGINT NOT NULL PRIMARY KEY,
    nrIncarico int,
    annoIncarico int,
    ...
);

CREATE TABLE UsersWorksRel(
    idGiudice BIGINT NOT NULL,
    idIncarico BIGINT NOT NULL,
    FOREIGN KEY (idGiudice) REFERENCES Users(idObj),
    FOREIGN KEY (idIncarico) REFERENCES Works(idObj)
);
在AbstractPO中,我使用了
@MappedSuperclass
注释,用户也可以,但我无法注释Judge类。。。 我的想法是利用评委会与作品有很多联系,比如:

public class Judge extends UserPO{

   private List<Works> incarichi;

   public Judge () {
        setTipo(TipologiaUtente.GIUDICE);
   }

   @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
   @JoinTable(name = "UsersWorksRel", joinColumns = { 
            @JoinColumn(name = "idGiudice", nullable = false, updatable = false) },
            inverseJoinColumns = { @JoinColumn(name = "idIncarico", nullable = false, updatable = false) })
    public List<Works> getIncarichi() {
        return incarichi;
    }

    public void setIncarichi(List<Works> incarichi) {
        this.incarichi = incarichi;
    }
}
public类扩展UserPO{
私人名单;
公共法官(){
setTipo(Tipologiaute.GIUDICE);
}
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“UsersWorksRel”,joinColumns={
@JoinColumn(name=“idGiudice”,nullable=false,updateable=false)},
inverseJoinColumns={@JoinColumn(name=“idincarco”,nullable=false,updateable=false)})
公共列表GetInvoichi(){
返回一号;
}
公共无效SetInboichi(列表Inboichi){
this.invoichi=invoichi;
}
}

您可以用
@MappedSuperclass
注释
UserPO
,用
@Entity
判断
。或者您可以在
UserPO
Judge
之间使用hibernate继承映射。我不能使用
@MappedSuperclass
,因为我需要将它映射到用户表,因为我有其他用户,他们无法判断。请告诉我更多关于冬眠的知识。我尝试了许多例子,但我无法安排它。在超类
UserPO
中,您设置了所有子类的公共数据,如
Judge
Criminal
被害人
@MappedSuperclass不仅允许继承数据,还允许休眠映射。所以
UserPO
中的字段映射到
Judge
表中的列。您需要一些好的教程来理解所有这些。我可以推荐我看一下教程……但是请注意,我需要能够实例化UserPO和判断哪个映射了users表,判断者还需要映射许多用户的UsersWorksRel。