在 關聯映射中,如一對一、一對多、多對一等,都有設定cascade為CascadeType.ALL,這表示儲 存其中一方實例時,若有參考至另一方實例,另一方實例也一併儲存,這個稱之為聯級(Cascade)操作。
預設是不使用聯級操作,而可設定的聯級操作如下所示:
CascadeType.PERSIST | 在儲存時一併儲存 被參考的物件。 |
CascadeType.MERGE | 在合併修改時一併 合併修改被參考的物件。 |
CascadeType.REMOVE | 在移除時一併移除 被參考的物件。 |
CascadeType.REFRESH | 在更新時一併更新 被參考的物件。 |
CascadeType.ALL | 無論儲存、合併、 更新或移除,一併對被參考物件作出對應動作。 |
在 一對多 中略為介紹過Fetch模式,FetchType.LAZY時, 除非真正要使用到該屬性的值,否則不會真正將資料從表格中載入物件,所以EntityManager後,才要載入該屬性值,就會發生例外錯誤,解決的方式 之一是在EntityManager關閉前取得資料,另一個方式則是標示為FetchType.EARGE, 表示立即從表格取得資料。
一些標註的Fetch模式有其預設值,例如:
@Basic | FetchType.EARGE |
@OneToOne | FetchType.EARGE |
@ManyToOne | FetchType.EARGE |
@OneToMany | FetchType.LAZY |
@ManyToMany | FetchType.LAZY |
不過,即使標註為FetchType.LAZY,此一 標註僅為建議,實作廠商仍可以將之實作為FetchType.EARGE。