簡體   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