zoukankan      html  css  js  c++  java
  • Hibernate(四)--延迟加载(lazyload)

    hibernate中的延迟加载(lazyload)分属性的延迟加载关系的延迟加载

    属性的延迟加载:
        当使用load的方式来获取对象的时候,只有访问了这个对象的属性,hibernate才会到数据库中进行查询。否则不会访问数据库

    Load的加载方式:
    1、Load采用延迟加载的方式,hibernate的思想是既然这个方法支持延迟加载,它就认为这个对象一定在数据库中存在,可以放心的使用代理来延迟加载,如果在使用过程中出现了问题就放心的抛异常
    2、Load方法会首先查询session缓存,看缓存中有没有这个对象
    3、如果缓存中没有这个对象就会去创建个代理对象来管理,因为延迟加载需要代理来执行。但是并没有去数据库中查询
    4、只有当你实际使用这个对象的时候,它才会触发sql语句。这个时候hibernate就会去查询二级缓存和数据库,如果数据库中没有这条语句,就抛出异常ObjectNotFoundException。

    hibernate load方法加载实体对象的时候,会根据映射文件上 类级别 lazy属性值的配置,分情况讨论:
    (1)若为true,即为延迟加载,就是上面的模式
    (2)若为false,即为非延迟加载,即立即加载。就跟get方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个ObjectNotFoundException。

    关系的延迟加载:

        one-many many-many的时候都可以使用关系的延迟加载

     元素中的lazy属性的可选值为:true(延迟加载),extra(增强延迟加载)和false(立即加载);
     元素中的lazy属性的默认值为true
         extra其实是一种比较智能的延迟加载,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据。


    hibernate在对象关系映射文件中配置加载策略的方式:(lazy)
    1、类级别
    元素中lazy属性的可选值为true(延迟加载)和false(立即加载);
    元素中的lazy属性的默认值为true

    2、一对多关联级别:
    元素中的lazy属性的可选值为:true(延迟加载),extra(增强延迟加载)和false(立即加载);
    元素中的lazy属性的默认值为true
         extra其实是一种比较智能的延迟加载,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据。


    3、多对一关联级别:
    元素中lazy属性的可选值为:proxy(延迟加载),no-proxy(无代理延迟加载)和false(立即加载)
    元素中的lazy属性的默认值为proxy

  • 相关阅读:
    浅谈组装主机的一些注意问题2
    浅谈组装主机的一些注意问题1
    浅谈组装主机的一些注意问题
    openGL中的原理理解1---一个视图需要支持OGL需要配置,GLenbalView的理解
    OpenGL中常用的函数
    MFC中的DLL、LIb文件的创建、使用
    MFC中的多线程
    MFC中的一般经验之谈5
    算法时间复杂度和NP问题简介
    如何搜索高质量论文
  • 原文地址:https://www.cnblogs.com/crazy-lc/p/12193357.html
Copyright © 2011-2022 走看看