hibernate的延迟加载究竟怎么用

 我来答
ly...t@163.com
2016-12-26 · TA获得超过308个赞
知道小有建树答主
回答量:496
采纳率:100%
帮助的人:290万
展开全部
  • 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加载某个实体时,会对这个实体所有单端关联的另一个实体对象采用延迟加载。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式