1 回答

TA貢獻1831條經(jīng)驗 獲得超10個贊
盡管Cascade.PERSIST確保CardInfo對象與其父對象一起持久存在User,但維護關(guān)系是應(yīng)用程序或?qū)ο竽P偷呢?zé)任[ 1 ]。
由于外鍵位于 中CardInfo,因此您必須確保每個都CardInfo與您要保留的 相關(guān)聯(lián)User。一種常見的模式是添加額外的邏輯來處理域?qū)ο笾嘘P(guān)系的雙方,例如:
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);
}
}
上面的代碼確保關(guān)系的雙方同步(即,如果用戶將卡添加到其付款詳細(xì)信息中,則該卡信息由用戶“擁有”)。
CardInfo最后,雖然與您的問題沒有直接關(guān)系,但我的建議是在和 之間建立強制關(guān)系User及其各自的連接列,NOT NULL以便查詢得到正確優(yōu)化,并且CardInfo數(shù)據(jù)庫中不能存在與其所屬的關(guān)聯(lián)User:
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name="user_id", nullable = false)
添加回答
舉報