hibernate的延迟加载究竟怎么用
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加载某个实体时,会对这个实体所有单端关联的另一个实体对象采用延迟加载。