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和遍历现有关系。
添加回答
举报