回覆列表
  • 1 # 小粉打啊

    ibernate中主要是透過代理(proxy)機制來實現延遲載入。它的具體過程:Hibernate叢資料庫獲取某一個物件資料時、獲取某一 個物件的集合屬性值時,或獲取某一個物件所關聯的另一個物件時,由於沒有使用該物件的資料,hibernate並不是資料庫載入真正的資料,而只是為該對 象建立一個代理物件來代表這個物件,這個物件上的所有屬性都是預設值;只有在真正需要使用該物件的資料時才建立這個真實物件,真正從資料庫中載入它的數 據,這樣在某些情況下,就可以提高查詢效率。

    有如下程式程式碼:

    User user=(User)session.load(clazz, id);//直接返回的是代理物件

    System.out.println(user.getId());//沒有傳送sql語句到資料庫載入

    user.getName();//建立真實的User例項,併發送sql語句到資料庫中

    注意:1.不能判斷User=null;代理物件不可能為空

    代理物件的限制:和代理關聯的session物件,如果session關閉後訪問代理則拋異常。session關閉之前訪問資料庫

    2.getId()方法不行因為引數為ID,getClass()方法不用訪問資料庫就可以得到的資料

    Hibernate中預設採用延遲載入的情況主要有以下幾種

    1,當呼叫session上的load()載入一個實體時,會採用延遲載入。

    2,當session載入某個實體時,會對這個實體中的集合屬性值採用延遲載入

    3當session載入某個實體時,會對這個實體所有單端關聯的另一個實體物件採用延遲載入。

  • 中秋節和大豐收的關聯?
  • 草圖大師SketchUp Pro 2019安裝及啟用教程?