• Hibernate 关于load和get方法区别


    load和个体方法都可以充分利用内部缓存和二级缓存中的现有数据。

     

    **************************************************************************

    Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。其区别在于:

    如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
    Load方法可返回实体的代理类实例,而get方法永远直接返回实体类。

    ***************************************************************************************

       get()方法的执行顺序如下:
       a):首先通过id在session缓存中查找对象,如果存在此id的对象,直接将其返回
       b):在二级缓存中查找,找到后将 其返回。
       c):如果在session缓存和二级缓存中都找不到此对象,则从数据库中加载有此ID的对象
       因此get()方法并不总是导致SQL语句,只有缓存中无此数据时,才向数据库发送SQL!  
       

    ******************************************************************************
        与get()的区别:
        1:在立即加载对象(当hibernate在从数据库中取得数据组装好一个对象后
        会立即再从数据库取得数据此对象所关联的对象)时,如果对象存在,
        load()和get()方法没有区别,都可以取得已初始化的对象;但如果当对
        象不存在且是立即加载时,使用get()方法则返回null,而使用load()则
        抛出一个异常。因此使用load()方法时,要确认查询的主键ID一定是存在
        的,从这一点讲它没有get方便!
       2:在延迟加载对象(Hibernate从数据库中取得数据组装好一个对象后,
        不会立即再从数据库取得数据组装此对象所关联的对象,而是等到需要时,
        都会从数据库取得数据组装此对象关联的对象)时,get()方法仍然使用
        立即加载的方式发送SQL语句,并得到已初始化的对象,而load()方法则
        根本不发送SQL语句,它返回一个代理对象,直到这个对象被访问时才被
        初始化。
       


  • 相关阅读:
    SE78添加图片,比如smartforms用的…
    Smartforms
    将文件上传到FTP服务器
    【转自ITPUB】SYNONYM关于underlying table权限的小小发现
    alter session set current_schema=Schema
    exportDISPLAY=:0.0的解释
    如何通过使用Xmanager的图形化界面修改系统
    Xms Xmx PermSize MaxPermSize 区别
    oracle中schema指的是什么?
    oracle表空间查询
  • 原文地址:https://www.cnblogs.com/ainiaiwo/p/5817820.html
Copyright © 2020-2023  润新知