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載入某個實體時,會對這個實體所有單端關聯的另一個實體物件採用延遲載入。
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載入某個實體時,會對這個實體所有單端關聯的另一個實體物件採用延遲載入。