`
jackyIT
  • 浏览: 13494 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

延迟加载

SQL 
阅读更多
一、概念:即两者之间存在关联关系,那么在加载主对象的时候,对副对象的加载处理,是延迟或立即,比如说公司(主)-》部门(副).

二、分析
1.立即检索
实现方法:将<set/>属性的lazy设为false,即不延迟加载.注解是@fetch = FetchType.EAGER.
检索方式:加载主对象的同时加载副对象信息,反之亦然.
优点:即使当前session关闭,处于游离状态,也能获取到关联对象.
缺点:执行的SQL太多,增加数据库压力,还可能加载一些不需要的对象,即浪费时间,又浪费缓存控件.
优先使用场合:
a.在业务或程序中,需要立即访问关联对象时可以使用.
b.使用二级缓存.

2.延迟检索
实现方法:将<set/>属性的lazy设为true,即延迟加载.注解是@fetch = FetchType.LAZY.
检索方式:不立即检索与之关联的对象,但是会为关联对象创建一个代理对象,这个代理对象只初始化一个OID,只有这个代理对象的属性被访问时,才初始化该代理对象.
优点,缺点:与立即检索相反.
优先使用场合:
a.一对多或多对多的关联使用.
b.在程序中不需要立即访问或者该关联的对象不需要访问的时候.

3.迫切左外连接检索
实现方法:将<set/>属性的fetch设为join.
检索方式:立即初始化关联对象,但是此方法只针对load()和get()方法,当同时采用延迟加载和迫切左外连接时,后者会覆盖前者.
优点:无论当前对象属于持久化状态,或游离状态,两者偶能做回
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics