Java @OnetoMany关系Hibernate Spring MVC

Java @OnetoMany关系Hibernate Spring MVC,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我想做一个人和电话之间的简单关系。在这种情况下,一个人可以有许多电话号码 因此,我在模型中使用了这种关系。总结: 类人士(“Pessoa”): 我不知道为什么,但是与手机相关的数据被记录下来了,但是idPessoa(idPerson)没有,那么我就失去了表之间的关系 表单中使用的所有其他数据,甚至OnetoOne关系都记录良好,只有此OneToMay出现问题。如果设置此关系并保存两个实体,则必须在两侧设置关系。否则,保存第一个实体可以设置关系,保存第二个实体可以再次删除关系 因此,如果您为手机

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

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

类人士(“Pessoa”):

我不知道为什么,但是与手机相关的数据被记录下来了,但是idPessoa(idPerson)没有,那么我就失去了表之间的关系


表单中使用的所有其他数据,甚至OnetoOne关系都记录良好,只有此OneToMay出现问题。

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

因此,如果您为手机设置了联系人以设置关系,但没有明确地将手机添加到联系人的手机列表中。坚持使用手机可以设置关系。但是如果person被持久化(在再次检索它之前,它将填充列表),hibernate将再次删除该关系,因为持久化person实体的列表中没有电话

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

因此,您有两种选择。
选项1:如果要持久化两个实体,则需要管理双方的关系。
选项2:持久化用于设置关系的实体,而不持久化另一个实体。不要继续使用它(如果您需要进一步使用它,请通过从数据库中再次检索来替换它)。

如果两个实体都有更改并且需要保存,则选项1是最简单的选择。如果两个实体中只有一个发生了更改,则可以使用选项2。

我也是hibernate的初学者,但我认为您应该在某个地方为idperson设置数据,如下所示:telephone.setPerson(person)数据库正在更新。您是否有意不在
Telefone
类中显示getter和settes,或者在代码中遗漏了它们?如果没有合适的getter和setter,可能会导致问题。我已经添加了misseds getter和setter,但仍然不起作用映射似乎还可以,但是持久化实体的代码在哪里?否则,我们无法告诉您可能出了什么问题。
@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;
    }
}