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)
添加回答
舉報