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