繁体   English   中英

@OnetoMany关系Hibernate Spring MVC

[英]@OnetoMany relationship Hibernate Spring MVC

我想在“人”和“电话”之间建立简单的关系。 在这种情况下,一个人可以有多个电话号码。

因此,我在模型中使用了这种关系。 总结:

班级人员(“佩索阿”):

@Entity
public class Pessoa {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int idPessoa;

    @OneToMany(mappedBy = "pessoa", targetEntity = Telefone.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Telefone> telefone;

    public int getIdPessoa() {
        return idPessoa;
    }
    public void setIdPessoa(int idPessoa) {
        this.idPessoa = idPessoa;
    }
    public List<Telefone> getTelefone() {
        return telefone;
    }
    public void setTelefone(List<Telefone> telefone) {
        this.telefone = telefone;
    }

}

类电话(“电话”):

@Entity
public class Telefone {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int idTelefone;
    private TipoTelefone tipoTelefone;
    private int numeroTelefone;
     @ManyToOne
     @JoinColumn(name="idPessoa")
     private Pessoa pessoa;

    public TipoTelefone getTipoTelefone() {
        return tipoTelefone;
    }
    public void setTipoTelefone(TipoTelefone tipoTelefone) {
        this.tipoTelefone = tipoTelefone;
    }
    public int getNumeroTelefone() {
        return numeroTelefone;
    }
    public void setNumeroTelefone(int numeroTelefone) {
        this.numeroTelefone = numeroTelefone;
    }
}

我不知道为什么,但是记录了与电话有关的数据,但是没有记录idPessoa(idPerson),因此我失去了表之间的关系。

台式电话

表格中使用的所有其他数据,甚至OnetoOne关系都记录得很好,仅此OneToMay出现了问题。

如果设置了这种关系并保存了两个实体,则必须在两侧都设置该关系。 否则,保存第一个实体可以设置该关系,保存第二个实体可以再次删除它。

因此,如果您将某人设置为“电话”以设置关系,但是您没有将电话明确添加到该人的电话列表中。 坚持电话设置关系。 但是如果人员被保留(在再次检索该人之前将其填充到列表中),则休眠将再次删除该关系,因为被保留的人实体列表中没有电话。

另一种方法是,如果先保留此人,然后再保留电话,则将该电话添加到该人的电话列表中但不为该电话设置该人可以执行相同的操作。

因此,您有2个选择。
选项1:如果要保留两个实体,则需要管理双方的关系。
选项2:坚持用于设置关系的实体,而不坚持另一实体。 不要继续使用它(如果需要进一步使用它,请从数据库中再次获取它来替换它)。
如果您在两个实体中都有更改,并且需要保存它们,则选项1是最简单的选择。 如果仅对两个实体之一进行更改,则可以使用选项2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM