2017-07-19 105 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.