`

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

分享到:
评论

相关推荐

    hibernate中get和load方法的区别

    NULL 博文链接:https://ysj5125094.iteye.com/blog/1897557

    hibernate get load区别

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

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

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

    Hibernate的get和load方法的区别

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

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

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

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

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

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

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

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

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

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

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

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

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

    hibernate get/load/saveOrUpdate/statistics

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

    hibernate基础教程

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

    hibernate操作数据库笔记

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

    hibernate查询与缓存

    Hibernate查询首先介绍get()和load()方法的区别:get()方法和load()方法的区别主要在于对二级缓存的使用上。load()方法会使用二级缓存,而get()方法在一级缓存没有找到会直接查询数据库,不会去二级缓存中查找。 get...

    hibernate 3中的缓存小结

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

    Hibernate学习笔记

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

    Hibernate入门文档

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

Global site tag (gtag.js) - Google Analytics