CascadeType 與 FetchType

来源:互联网 发布:java new date 格式化 编辑:程序博客网 时间:2024/06/03 15:37

在關聯映射中,如一對一、一對多、多對一等,都有設定cascade為CascadeType.ALL,這表示儲存其中一方實例時,若有參考至另一方實例,另一方實例也一併儲存,這個稱之為聯級(Cascade)操作。

預設是不使用聯級操作,而可設定的聯級操作如下所示:

CascadeType.PERSIST在儲存時一併儲存被參考的物件。CascadeType.MERGE在合併修改時一併合併修改被參考的物件。CascadeType.REMOVE在移除時一併移除被參考的物件。CascadeType.REFRESH在更新時一併更新被參考的物件。CascadeType.ALL無論儲存、合併、更新或移除,一併對被參考物件作出對應動作。


一對多 中略為介紹過Fetch模式,FetchType.LAZY時,除非真正要使用到該屬性的值,否則不會真正將資料從表格中載入物件,所以EntityManager後,才要載入該屬性值,就會發生例外錯誤,解決的方式之一是在EntityManager關閉前取得資料,另一個方式則是標示為FetchType.EARGE,表示立即從表格取得資料。

一些標註的Fetch模式有其預設值,例如:

@BasicFetchType.EARGE@OneToOneFetchType.EARGE@ManyToOneFetchType.EARGE@OneToManyFetchType.LAZY@ManyToManyFetchType.LAZY


不過,即使標註為FetchType.LAZY,此一標註僅為建議,實作廠商仍可以將之實作為FetchType.EARGE

原创粉丝点击