CascadeType 與 FetchType


在 關聯映射中,如一對一、一對多、多對一等,都有設定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