hibernate中的延迟加载(lazyload)分属性的延迟加载和关系的延迟加载
属性的延迟加载:
当使用load的方式来获取对象的时候,只有访问了这个对象的属性,hibernate才会到数据库中进行查询。否则不会访问数据库。
只要访问一次代理对象的非主属性时,hibernate就会把整个实体类加载进来,即使关闭了session也可以访问实体对象里面的数据。
关系的延迟加载
延迟加载又叫lazyload,在one-many many-many的时候都可以使用关系的延迟加载
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表的查询。