下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、hibernate one to many 迟延加载分析1: oneto many,默认是采纳延迟加载的(lazy=ue),由于无数状况下,当我们猎取到one的一方后,many的一方并非立刻需要的,当我们常常只需要one的一方的时候,延迟加载就很故意义了. 2:hibernate 中的延迟加载(lazy loading),当我们在程序中猎取到了一的一方,但是不需要多的一方,那么用法延迟加载就是十分适合的. 3:当我们one和many都要同时需要的时候,我们可以将one的一方的hbm.xml中用于保存many的set元素的lazy改为fae one to many的延迟加载分析 当我们通过通过s
2、ession.get()查询到one的一方后,其中用于保存many的set其实是一个代理,其类型为org.hibernate.lection.persistentset, persistentset 实现了java.util.set接口,并内置了一个用于存放实际数据的hashset,初始时为空,当真刚要拜访这个集合的元素时,如调用java.util.setiterator()toarray() containsall(),tostring,equal()hashcode等要真正拜访集合的元素的办法的时候,程序才主要发出sql语句,真正加载many一方,并且一次读取完many一方的全部元素. p
3、ersistentset 实现了java.util.set接口,并内置了一个hashset实例,persistentset代理了java.util.set的iterator()toarray() containsall(),tostring等办法: 而代理的过程很容易: 若要拜访到many的数据,则先加载many的全部元素,再容易调用被代理的办法! 这里也是应用到 代理模式 的思想.框架里,这个模式很常用. 在hibernate里,延迟加载基本是用 代理模式 实现的! 如: public class persistentset tendsabstractpersistentcollection
4、 implements java.util.set 。 publicstring tostring() read(); /先加载many一方 return .tostring(); 。 再看看read()办法: public abstract classabstractpersistentcollection implementsserializable, persistentcollection * call by any read-only method of the collection interface protected final vo read() initialize(fal
5、se); protecteinal void initialize(boolean writing) if (!initialized) if(initializing) throw new lazyinitializationexception( illegal access toloading collection /检查与数据库的衔接 throwlazyinitializationexceptionifnotconnected(); /这里真正加载many session.initializecollection(this, writing); . order - many-to-one
6、 - customer 在many.hbm.xml中 many-to-one name= customer > /many-to-one 1. lazy= false false:取消懒加载策略,即在加载对象的同时,发出查询语句,加载其关联对象 意为: 在many一方中查询出一个对象之后,同时也要查出one的一方. one的一方的类型为one的实际类型(非代理类,这里是customer) 2. lazy= proxy /这是默认 proxy:这是hibernate对单端关联的默认懒加载策略,即惟独在调用到其关联对象的办法的时候才真正发出查询语句查询其对象数据,其关联对象是代理类 意为:
7、在many一方中查询出一个对象之后,one的一方用代理类代替(customer_$_javassist_1),这个代理只包含one的一方的id,而这个id是在many这一方的标识one的外键,目的是为了延迟初始化one的一方.,当真正拜访one的一方时,才正式初始化它.所以终于取得的是代理类(非实际的customer类型,初始化前只含customer的id) 3.lazy= no-proxy 不常用,那个” 编译时字节码增加”都不知道是什么了的本人没有什么增加工具的状况,效果和proxy一样的,也是用代理类 customer_$_javassist_1 来代理了customer对象,用反射分析
8、到两种状况下的代理类的字段,办法都一样的这个不管了. 网上的分析: child - many-to-one - parent class child private parent parent; public parent getparent () return this.parent;/拜访了实例变量 class parent private string name; public string getname() return ;/拜访了实例变量 public void f() system.out.print( invokeing f() /没有拜访实例变量 假如 many-to-one 的lazy设为proxy,当child.getparent().getname()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 592-2026船用法兰铸铁止回阀
- 2025~2026学年广东省深圳市福田区北师大版六年级上册11月份月考数学试卷【附答案】
- 2026学年黑龙江省双城市六年级数学期末深度自测培优拓展题详细参考解析详细答案和解析
- PHP中级面试题及详细答案(企业真实版)
- 中医馆艾灸烟雾净化系统安装与使用方案
- PE急救伤员实操理论测试题及详细答案
- 古建筑台明及石构件修复施工方案
- 公共卫生样本生物安全防护清单规范共识
- 原子吸收分光光度计安全操作规程
- 2025-2026学年湖北省枣阳市初中历史九年级期末上册高分全真模拟题(附答案)
- 2027届高三语文上学期全国各地名校9月模考病句修改汇编(含答案)
- 四川成都简阳市2026年四级城乡社区工作者招聘考试试卷-含答案解析
- 2026年科研院所成果转化岗竞聘笔试真题附带答案
- FDE模式行业观察与实践
- (正式版)T∕CSNAME 153-2025 沿海内河船舶智能航行感知系统设计要求
- 四川省2026年高职单招文化考试(中职类)语文试卷+答案
- T∕AOPA 0082-2025 无人驾驶航空器系统遥控站适航技术规范
- 2026河北邯郸市劳动就业服务局招聘公益性岗位人员笔试备考试题及答案解析
- 混凝土材料使用管理制度
- 中药冷敷技术课件教学
- 无缝气钢瓶定期检验工作质量鉴定评审细则
评论
0/150
提交评论