Hibernate通过Intermadiate表映射具有ManyToOne的实体

时间:2017-05-17 02:56:58

标签: java hibernate

我在班级之间有这种关系

假面

@Entity
@Table(name = "estudiante")
@PrimaryKeyJoinColumn(name = "est_id", referencedColumnName = "per_id")
public class Estudiante extends Persona {

    @ManyToOne
    @JoinColumn(name = "est_acudiente")
    private Acudiente acudiente;

    @ManyToOne
    @JoinColumn(name = "est_madre")
    private Persona madre;

    @ManyToOne
    @JoinColumn(name = "est_padre")
    private Persona padre;

    @ManyToOne
    private Grado grado;

}

歌德

@Entity
@Table(name = "grado")
public class Grado {

    @Id
    @Column(name = "gra_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Short id;

    @Column(name = "gra_nombre")
    private String nombre;

    public Short getId() {
        return id;
    }

    public void setId(Short id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

}

这里的东西是学生(Estudiante)可以在不同程度(Grado)的时间,所以会有一个中间表来保存学生的所有学位,但我只需要知道学生的实际学位我无法通过hibernate获得如何实现这一目标。

希望你能帮助我,对不起我的英语。

很高兴。

2 个答案:

答案 0 :(得分:1)

根据您的映射,One Estudiante只能有一个Grado

Estudiante和Grado属于多对一关系 所以Estudiante可以有多个Grado

所以你的关系应该是这样的

<强> Estudiante.java

@OneToMany( mappedBy = "estudianteId")
private List<Grado> lstGrado;

<强> Grado.java

@JoinColumn(name = "estudianteId", referencedColumnName = "ID")
@ManyToOne
private Estudiante estudianteId;

要了解最新的Grado,你可以做一些事情

  1. 如果所有Grado插入都在订单中,您可以迭代最新的gra_id
  2. 在Grado中添加新列,并将最新记录标记为Y,将其他记录标记为N

答案 1 :(得分:1)

如果GRADO包含许多ESTUDIANTE和ESTUDIANTE链接到许多GRADO,那么您正在寻找多对多的关系。这样你就可以获得链接表。

喝彩!