zoukankan      html  css  js  c++  java
  • hibernate中load和get方法的区别

    1.读取时机不同(当lazy=true的时候)
        load是采用延迟机制(load语句不读库,等使用非主键时才去读库),而get不采用延
      迟机制(get语句时马上读库);

    2.搜索不到数据时的情况
        当搜索的数据不存在的时候,load依然会返回一个对象,在你使用该对象的非主键数
      据时,会抛出异常;
        当搜索的数据不存在的时候,get会返回一个null;
      其实看似load到用的时候才去读数据库,比get要节省资源,但还没深入研究过。

    3.get不支持lazy   load支持lazy

    4.采用get加载数据时,如果无匹配数据则返回null load则报异常
    ------------------------------------------------------------
    hibernate lazy策略可以使用在:
    * <class>标签上,取true,false值
    * <property>标签上,取true,false需要增强类
    * <set><list>上,取false,true,extra
    * <one-to-one>、<many-to-one>单端关联上,可以取值false/proxy/noproxy

    lazy概念:
    只有真正使用该对象时,才会创建,对hibernate而言,真正使用的时候才会发出,
    hibernate支持lazy策略只有在session打开状态下才有效如果把用延迟加载的话数据传递给动态
    页面那么使用OpenSessionInView模式,直到我们把session中的所有属性用完了,才关闭session。

    A.<class>标签上的lazy特性只对普通属性起作用hibernate在集合上的lazy策略,取值false,
    true,extra

    B.<class>标签上的lazy不会影响到集合上面的lazy特性,lazy默认为true;

    C.集合标签上面的lazy特性推荐使用 extra 因为比较智能

    D.在<class>上lazy为true时,load时不发出sql语句,只有在使用是才发出。为false时load时就
    马上发出sql语句。

    E.在<class>上lazy为true时,load时不发出sql语句,只有使用时才发出。为false时在第一次
    load时就执行全部sql语句。为extra时,和true差不多,不过发出的sql语句比较智能。

    F.hibernate 在<one-to-one><many-to-one>单端关联上,可以取值false/proxy/noproxy 默认proxy

    G.<class>标签上的lazy不会影响到单端上面的lazy特性。

    ------------------------------------------------------------
    Hibernate.initialize(Object proxy) 方法强制加载这样就相当于在程序中动态改变为lazy=false

  • 相关阅读:
    redis限流器的设计
    使用HystrixCommand封装http请求
    自定义的最简单的可回调的线程任务CallbackableFeatureTask(模仿google的ListenableFutureTask)
    通用的规则匹配算法(原创)(java+.net)
    redis缓存切面实现(支持缓存key的spel表达式)
    使用join和CountDownLatch来等待线程结束
    shell日常实战练习——通过监视用户登陆找到入侵者
    Nginx web服务器
    nginx——防盗链功能
    nginx 隐藏nginx版本号
  • 原文地址:https://www.cnblogs.com/iteakey/p/4147235.html
Copyright © 2011-2022 走看看