1 回答
TA贡献1831条经验 获得超10个赞
尽管Cascade.PERSIST确保CardInfo对象与其父对象一起持久存在User,但维护关系是应用程序或对象模型的责任[ 1 ]。
由于外键位于 中CardInfo,因此您必须确保每个都CardInfo与您要保留的 相关联User。一种常见的模式是添加额外的逻辑来处理域对象中关系的双方,例如:
public class User {
// fields, accessors and mutators
public void addPaymentDetails(CardInfo cardInfo) {
if (paymentDetails == null) {
paymentDetails = new LinkedHashSet<>();
}
if (cardInfo.getUser() != this) {
cardInfo.setUser(this);
}
paymentDetails.add(cardInfo);
}
}
上面的代码确保关系的双方同步(即,如果用户将卡添加到其付款详细信息中,则该卡信息由用户“拥有”)。
CardInfo最后,虽然与您的问题没有直接关系,但我的建议是在和 之间建立强制关系User及其各自的连接列,NOT NULL以便查询得到正确优化,并且CardInfo数据库中不能存在与其所属的关联User:
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name="user_id", nullable = false)
添加回答
举报