• hibernate的load与get的区别


    1.延迟加载

    load是true而get是false

    即:load采用的是延迟加载的方式;而get不是。

    hibernate思想是:既然这个方法支持延迟加载 他就认为这个对象一定在数据库存在,在你声明

    User u = (User) session.get(User.class, id);

    这句时候,hibernate就干了一件事--->查询session缓存,如果缓存中没有这个对象,那就创建个代理。(因为延迟加载需要代理来执行 所以就创建了个代理。)

    load访问数据库的时候,load默认为加载的数据数据库一定存在数据库中,返回的是一个代理实体,而不是一个真正的类实例,

    2.查询顺序

    load首先查询session缓存,如果找到,返回代理实体;没有找到,就到二级缓存中间进行查找;如果还是没有,就创建代理实例到数据库中间查找,还是没有的话返回objectnotfoundexception异常;

    get也是首先查找session缓存,如果session缓存中间没有,越过二级缓存,直接查找数据库,如果数据库没有数据的话,返回null。

    3.返回类型

    load()方法可返回实体的代理类实例;

    而get方法永远直接返回实体类。

    // ......... 注意  get在查询session缓存的时候入没有数据是跳过二级缓存,直接查询数据库中的数据。

  • 相关阅读:
    hudson搭建经验总结(二)
    CodePen最佳实例分享
    hudson搭建经验总结
    资料文件夹管理系统
    ueditor+word图片上传
    asp.net上传大文件
    UEditor粘贴word
    大文件上传组件
    文件资源管理系统
    ueditor+复制word图片粘贴上传
  • 原文地址:https://www.cnblogs.com/gxpblogs/p/3080898.html
Copyright © 2020-2023  润新知