`

hibernate中get和load方法的区别

阅读更多

1.从返回将结果:

    load方法检索不到数据抛出org.hibernate.ObjectNotFoundException异常,get方法检索不到数据返回null。

 

2.从检索机制:

    get 方法和 find 方法都是直接检索数据库,而load方法会先查找 session的persistent Context中是否有缓存,有则直接返回,没有则判断是否是lazy,不是则直接访问数据库,有数据则返回,没有则抛出异常,是lazy则创建代理对象,对象的initialized(初始化)属性值为false,target(目标)属性值为null,在访问代理对象的非ID属性时,检索数据库数据,将数据赋值代理对象target上,并将initialized属性值设为true,反之抛出异常。

 

3.根本区别:

    使用load方法,hibernate认为该ID对应的对象(数据库记录)在数据库中一定存在,在访问该对象非ID数据时,检索数据库,没有该对象记录,则抛出异常。load方法抛出异常是指使用该对象的数据时,数据库中 不存在该数据时抛出异常,而不是创建该对象时。延迟加载的特性。

     load方法创建时首先查询session缓存,没有就创建代理对象,实际使用数据时才查询二级缓存和数据库。

     使用get方法,hibernate首先在session缓存中查找,然后再二级缓存中查找,还没有就检索数据库,数据库中依旧没有则返回null。

      实际上get方法在session缓存中找到了该ID对应的对象,且刚好该对象被代理过,load方法使用过,或者被其他对象延迟加载过,返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没没有加载实体数据,即除ID以外的实体数据,那么它会查询二级缓存或者数据库来加载数据,但返回的还是代理对象,只是已经加载了实体数据。

      

分享到:
评论

相关推荐

    hibernate中get和load的区别共5页.pdf

    hibernate中get和load的区别共5页.pdf.zip

    Hibernate的get和load方法的区别

    NULL 博文链接:https://811417208-qq-com.iteye.com/blog/506950

    Hibernate中get和load方法的区别以及close(),clear()、evict()等的区别

    Hibernate Session中的 flush方法的作用 get和load方式是根据id取得一个记录 下边详细说一下get和load的不同,因为有些时候为了对比也会把find加进来。...get方法和find方法都是直接从数据库中检索

    hibernate get load区别

    get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库

    Hibernate中get()和load()的区别.docx

    Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别。 1. get() 使用get()来根据ID进行单条查询: User user=session.get(User.class, "1"); 当get()方法被调用的时候...

    hibernate 三种 查询 方式 load与get的区别

    NULL 博文链接:https://cici9898-007.iteye.com/blog/1847710

    Hibernate查询 load与get的区别及其它查询测试

    NULL 博文链接:https://quicker.iteye.com/blog/658451

    Hibernate中load方法与get方法的区别

    Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的

    Hibernate中Session.get()方法和load()方法的详细比较

    今天小编就为大家分享一篇关于Hibernate中Session.get()方法和load()方法的详细比较,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    hibernate get/load/saveOrUpdate/statistics

    博文链接:https://log-cd.iteye.com/blog/205166

    Hibernate学习笔记

    Hibernate 学习笔记 get和load的区别 一对一,一对多,多对多 悲观锁,乐观锁 hibernate查询语言hql hibernate一级缓存、二级缓存 抓取策略

    Hibernate入门文档

    Hibernate 难点解析: hibernate中uuid和...Hibernate get与load的区别 hibernate二级缓存中list和iterator的用法 Hibernate中的对象有三种状态: lock和update区别 save 和update区别 update 和saveOrUpdate区别

    hibernate基础教程

    Hibernate中使用了一级缓存和二级缓存的机制来提高程序的性能. 一 为什么要使用缓存? 缓存是一块存储区域,可能是一块内存,也可能是一块硬盘.缓存能起到缓冲的作用,把程序经常使用...

    hibernate操作数据库笔记

    //该方法将到classpath下解析hibernate.cfg.xml中的配置,如果不用Hibernate默认的配置文件名和路径,可在该方法中指定Hibernate配置文件的名称和路径 2.用Configuration对象获取SessionFactory和Session对象:...

    Spring + Hibernate + Struts

    比如说hibernate,我问一个同学session接口的get和load方法有何异同,这位同学含糊了半天没答上来,连这两个方法干什么的都不知道,你是怎么把代码写出来的。问另一个精通struts的同学,HttpServletRequest的...

    hibernate 3中的缓存小结

    当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级...

Global site tag (gtag.js) - Google Analytics