我想在Person和Phone之间做一个简单的关系。在这种情况下,1个人可以拥有多个电话号码。
因此,我在模型中使用这种关系。总结:
班主任(“Pessoa”):
@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)没有,那我就失去了桌子之间的关系。
表格中使用的所有其他数据,甚至OnetoOne关系都记录良好,只有OneToMay才会出现问题。
答案 0 :(得分:0)
如果设置此类关系并保存两个实体,则必须在两侧设置关系。否则保存第一个实体可以设置关系,保存第二个实体可以再次删除它。
因此,如果您将电话的人员设置为设置关系,但您未明确将电话添加到此人的电话列表中。保持手机设置关系。但是如果人被持久化(在再次检索之前会填充列表),hibernate将再次删除该关系,因为持久化的人实体没有手机列表。
反过来说,将手机添加到此人的手机列表中但未设置手机用户的情况也可以这样做,如果该人先被持久存在,那么手机也可以这样做。
所以,你有两个选择。
选项1:如果要保留两个实体,则需要管理双方的关系
方案2:坚持用于建立关系的实体,不要坚持另一方。不要继续使用它(如果你需要进一步使用它,可以从数据库中再次检索它来替换它)
如果您在两个实体中都有更改并需要保存它们,则选项1是最简单的选择。如果仅对其中一个实体进行了更改,则可以使用选项2。