2015-05-12 29 views
2

請解釋一下hibernate提取和級聯類型all之間的區別。Hibernate EAGER提取和級聯類型有什麼區別

在這兩種配置中,我們可以加載與其父有關的子對象,那麼什麼是差異之間

+0

可能重複[FetchType LAZY和Java持久EAGER區別?(http://stackoverflow.com/questions/2990799/difference-between-fetchtype-lazy-and-eager-in-java-持久性) – DSF

回答

3

其簡單:考慮兩個實體1部和2員工,他們有一個一對多的映射。這是一個部門可以有許多員工 cascade = CascadeType.ALL這實際上意味着DepartmentEntity發生的任何更改都必須級聯到EmployeeEntity。如果您保存一個部門,則所有關聯的員工也將被保存到數據庫中。如果刪除部門,則與該部門相關的所有員工也將被刪除。
級聯式全部是PERSIST,REMOVE,MERGE和REFRESH級聯類型的組合。Example for Cascade type All

提取類型Eager本質上與Lazy.Lazy相反,它是所有Hibernate註記關係的默認提取類型。當您使用Lazy fetch類型時,Hibernate不會加載該特定對象實例的關係。 Eager將默認加載與Hibernate加載的特定對象相關的所有關係Click here for an example.

1

Cascadingfetching是正交關係。

  1. 級聯是有關從Parent實體傳播的entity state transitionChild,通過允許ORM工具堅持/合併/刪除代表了依賴協會簡化了數據訪問代碼。

  2. EAGER抓取是一個映射 - 時間關聯加載的決定,因爲它指示Hibernate總是在根實體加載時檢索依賴的關聯。查詢時間獲取是首選,因爲它提供了更好的靈活性,而LAZY獲取映射策略可以被FETCH指令覆蓋。用EAGER獲取你的卡住,因爲你不能在查詢時重寫它,並且Hibernate將總是獲取關聯,即使在某些使用情況下你不需要它。的

+0

Ok ..但是當我們說cascadetype全部時,在選擇查詢的情況下,它會同樣加載所有關聯的實體,以便在提取時可以檢索所有關聯的對象類。然後在什麼條件下使用它們 –

+0

仔細閱讀答案。我已經回答了您的評論問題 –

相關問題