我在學習Hibernate,我通過hibernate lazy initialization
來到。我有幾個關於的說明lazy initialization.
在休眠中進行懶化初始化
首先,什麼是所謂的惰性初始化,它做什麼?其次,我應該什麼時候去做它?接下來,我在博客中發現,使用它可以提高性能,我只需要知道如何。那麼,有沒有使用它的缺點?任何人都可以幫我理解這個lazy initialization
?
我在學習Hibernate,我通過hibernate lazy initialization
來到。我有幾個關於的說明lazy initialization.
在休眠中進行懶化初始化
首先,什麼是所謂的惰性初始化,它做什麼?其次,我應該什麼時候去做它?接下來,我在博客中發現,使用它可以提高性能,我只需要知道如何。那麼,有沒有使用它的缺點?任何人都可以幫我理解這個lazy initialization
?
提取(或初始化)與渴望相反。 Lazy fetching(hibernate中的默認值)意味着從數據庫加載記錄時,不會加載一對多關係子行。例如。
@Entity
@Table(name = "COMPANY")
public class Company {
...
@OneToMany(fetch = FetchType.LAZY)
private Set<Employee> employees = new HashSet<Employee>();
請求公司記錄不會返回(設置)員工,他們必須在另一個查詢中被請求。
優勢
缺點
注意對員工查詢有(或著名LazyInitializationException中將是不受歡迎的)。
This page保存有趣的信息。
延遲初始化意味着延遲加載。
在極少數words-
初始化的對象時,你首先需要它,它給你的不必要的對象不加載高性能。」
EG-假設你需要有一個包含多個表的連接的記錄,如果一次獲取,則需要比只讀取主表的時間更長的時間,使用延遲加載時,只有在需要時纔會獲取其餘的信息。所以在某些情況下實際上是efficient-loading
。
延遲設置決定是否在加載父對象時加載子對象。您需要執行此操作來設置父類的各自的Hibernate映射文件。 Lazy = true
(意思是不加載孩子)默認情況下,子對象的延遲加載是真實的。這可確保子對象不會被加載,除非通過在父應用程序上調用getChild()
方法在應用程序中明確調用它們。在這種情況下,在Parent對象上實際調用getChild()
時,hibernate發出新的數據庫調用來加載子進程。但是在某些情況下,當加載父對象時,您確實需要加載子對象。只需製作lazy=false
,當從數據庫加載父項時,hibernate將加載子項。示例lazy=true
(默認)如果不需要頻繁使用User類,則可以將用戶類的地址子項設置爲惰性。 lazy=false
但是,當您處理在線書店的書籍時,您可能需要爲書籍父母加載作者對象。