簡體   English   中英

延遲加載如何用於對象集合?

[英]How lazy loading works for collection of objects?

我有一對多關聯,而FetchType是 LAZY。
我知道休眠會為延遲加載的實體創建代理對象。 但是如果子實體是 Collection 類型它是如何工作的? 它會為每個集合對象創建代理嗎?
例子:-

 public class Company {
    private String name;    

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    private Set<Employee> employees;
 } 

代理是為字段創建的,這意味着employees將成為集合的代理。 現在,如果您嘗試遍歷集合的元素,則基本上有兩種可能性:

  1. 如果您不在事務中,則會拋出LazyInitializationException 這很好,因為您知道,您必須急切地獲取它們就是這個查詢。
  2. 如果您在事務中,那么 hibernate 將獲取您正在迭代的每個元素。 這是一個巨大的性能開銷,因為您需要觸發一個查詢來獲取父實體,然后為每個子實體發出一個查詢。 如果有N孩子,則需要對數據庫進行N+1調用,這也稱為N+1 選擇問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM