2017-07-19 91 views
0

我想在Person和Phone之间做一个简单的关系。在这种情况下,1人可以有许多电话号码。@OnetoMany关系Hibernate Spring MVC

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

类Person( “佩索阿”):

@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; 
    } 

} 

类电话( “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)没有,那我就失去了表格之间的关系。

table phone

表单中使用的所有其他DATAS,甚至OnetoOne关系正在录制好了,仅此OneToMay正在呈现的问题。

+0

我也是一个初学者在休眠,但我认为你应该设置数据的地方像下面这样的idperson:telephone.setPerson(person)for数据库正在更新。 – user8271644

+0

你有意不在'Telefone'类中显示getters和settes,或者你在代码中错过了它们吗?如果没有适当的获取者和安置者,可能会导致问题。 – raiyan

+0

我已经添加了错过的getters和setters,但仍然没有工作 –

回答

0

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

所以,如果您设置电话的人来设置关系,但您没有明确将电话添加到该人的电话列表。坚持电话设置关系。但是如果person被持久化(再次被检索之前会填充列表),hibernate将再次删除关系,因为持久化person实体没有列表中的电话。

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

所以,你有2个选项。
选项1:如果你想坚持两个实体你需要管理双方的关系。
选项2:坚持用于设置关系的实体,不要坚持另一个。不要继续使用它(如果需要进一步使用它,请从数据库中再次检索它来替换它)。
如果您在两个实体中都有更改并需要保存它们,则选项1是最简单的选择。如果你只在两个实体之一有变化,你可以使用选项2.