我有一個一對多的關係&手機的實體是這樣的:一對多雙向映射是不是減少了員工之間的外鍵
@Entity
public class Employee {
@Id
@Column(name = "EMP_ID")
private long id;
private String name;
@OneToMany(mappedBy = "owner")
private List<Phone> phones = new ArrayList<Phone>();
}
@Entity
public class Phone {
@Id
private long id;
private String phoneNumber;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "OWNER_ID")
private Employee owner;
}
在我的代碼,如果我救的手機第一,然後下一個員工:
session.save(phone);
session.save(employee);
然後我看到並插入查詢以保存Employee,然後插入查詢以保存Phone,然後更新查詢以更新Phone表中的owner_id。
因此,爲了避免在電話表的插入和更新,我已經添加下面的映射在我的手機實體:
@Entity
public class Phone {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "OWNER_ID", insertable=false, updatable=false)
private Employee owner;
}
現在,在這種情況下,我看到插入的員工,然後在插入手機,但owner_id是空值。
如何在保存實體時確保owner_id不爲空?我想以另一種方式將手機和員工保存在我的代碼中。
我不想在這裏使用級聯,你節省了員工,但我想先明確地保存手機,然後員工。那麼,我的方法是不可能的? – user3181365
@ user3181365我猜不是,因爲你說過,在保存手機的時候,你需要'OWNER_ID'作爲非空字段。在這種情況下,'Phone'不會首先保存,並會因'OWNER_ID'爲空而拋出錯誤。因此,必須先保存員工,然後「電話」。 – CodeRunner