hibernate中的延遲加載(lazyload)分屬性的延遲加載和關係的延遲加載
屬性的延遲加載:
當使用load的方式來獲取對象的時候,只有訪問了這個對象的屬性,hibernate纔會到數據庫中進行查詢。不然不會訪問數據庫。java
只要訪問一次代理對象的非主屬性時,hibernate就會把整個實體類加載進來,即便關閉了session也能夠訪問實體對象裏面的數據。數據庫
關係的延遲加載session
延遲加載又叫lazyload,在one-many many-many的時候均可以使用關係的延遲加載ui
1 package com.how2java.test; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.cfg.Configuration; 6 7 import com.ghw.pojo.Category; 8 9 public class TestHibernate { 10 public static void main(String[] args) { 11 SessionFactory sf = new Configuration().configure().buildSessionFactory(); 12 13 Session s = sf.openSession(); 14 s.beginTransaction(); 15 Category c = (Category) s.get(Category.class, 1); 16 17 System.out.println("log1"); 18 System.out.println(c.getProducts()); 19 System.out.println("log1"); 20 21 s.getTransaction().commit(); 22 s.close(); 23 sf.close(); 24 } 25 }
運行結果,從結果能夠看出第15行沒有執行product的查詢,到了18行才進行了product表的查詢。spa