我之间有这种关系

角色

@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),因此将有一个中间表来保存学生已经获得的所有学位,但是我只需要知道该学生的实际学位即可不能通过休眠来实现这一目标。

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

好的问候。

最佳答案

根据您的映射,一名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,您可以采取一些措施


如果所有Grado插件都在Order中,则可以迭代最新的gra_id
在Grado中添加新列,并将最新记录标记为Y,其他记录标记为N

10-04 12:40