2 回答

TA貢獻1820條經驗 獲得超9個贊
一種解決方法可能是使用@PrePersist. 對于這兩個實體,您可以實現如下方法:
掌握
@PrePersist
private void prePersist() {
if(null == getDependant().getMaster()) {
getDependant().setMaster(this);
}
}
依賴
@PrePersist
private void prePersist() {
if(null == getMaster().getDependant()) {
getMaster().setDependant(this);
}
}
或者也許只是省略空檢查。

TA貢獻1803條經驗 獲得超6個贊
您有多種選擇,但都取決于在擁有方正確設置關系,在您的情況下是Dependant. 您的最佳選擇取決于您的需求和使用模式。例如,另一個答案討論了定義一個方法,如果 和 之間的關聯是在且僅在第一次持久化 master 時建立@PrePersist的,則該方法可能非常干凈。MasterDependent
鑒于您正在使用字段級訪問,您還可以考慮Master.setDependant()為您完成工作:
class Master {
// ...
@OneToOne(mappedBy="master")
private Dependant dependant;
public void setDependant(Dependant dep) {
if (dep != null) {
dep.setMaster(this);
} else if (dependant != null) {
// leaves a dangling dependant ...
dependant.setMaster(null);
}
dependant = dep;
}
// ...
}
這將確保當您將 a 分配Dependant給 a時Master,互惠關系會自動設置在Dependant一邊。然后,您需要確保將持久性操作指定為正確地從Master到級聯Dependant。
但是請注意,這不是靈丹妙藥。如果您將分離或刪除分配Dependant給Master. 如果您嘗試替換 a 而不明確刪除原始的(如果有),它也可能會Master失敗Dependant。還有其他方法可以打破它。
由于以非常簡單的方式管理關系需要小心和關注細節,我建議你咬緊牙關,在任何地方手動進行,如果你確實需要在堅持一個新的Master和遍歷現有關系。
添加回答
舉報