有如下程序代码:
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加载某个实体时,会对这个实体所有单端关联的另一个实体对象采用延迟加载。