hibernate检索策略 9

        在hibernate中提出了检索策略的概念,即在建立关联关系的情况下,在加载当前对象时,对关联对象的检索策略。合理的设置关联对象之间的检索策略,可以充分提升软件的运行性能,实现对硬件资源的合理利用。

        hibernate提出了检索策略的概念,检索策略的作用域分为类级别才检索策略和关联级别的检索策略。

        类级别的检索策略只对Session的load()方法有效,通过配置<class>元素的lazy属性实现,默认值false表示不采用延迟检索策略。

        关联级别的检索策略时真正需要关注的,通过合理配置关联级别的检索策略,能够在加载当前对象时,对与当前对象关联的对象做出一个合理的处理,从而减少select语句的执行条数及对缓存的作用,提供软件的性能。

一、针对关联级别的检索策略如下:

        ①立即检索

            实现方法:将<set>元素的lazy属性设为false。

            检索方式:立即初始化与当前对象关联的对象。

            优点:即使当前对象处于游离状态,也可以方便地从当前对象导航到与之关联的对象。

            缺点:执行太多的select语句,增加了访问数据库的次数,还可能加载程序中不需要的对象,既浪费加载时间,又浪费缓存空间。

            优先考虑使用的场合

                    在程序中需要立即访问关联对象

                    使用了二级缓存。

        ②延迟检索

            实现方法:将<set>元素的lazy属性设为true。true是lazy属性的默认值

            检索方式:不立即初始化与当前对象关联的对象,而是为关联对象创建一个代理对象,该代理对象只有OID被初始化,只有该代理对象的其他属性被请求时,才初始化该代理对象。

             优点:由程序动态控制对象的加载,可以避免执行不必要的select语句加载不需要的对象,即节省加载时间,又节省缓存空间。

             缺点:当访问处于游离状态对象的关联对象时,必须保证关联对象已经被初始化。

             优先考虑使用的场合

                     一对多或者多对多关联

                     在程序中不需要立即访问或不需要访问与之关联对象。

        ③迫切左外联接检索

            实现方法:将<set>元素的fetch属性设为join,fetch属性的默认值为另一个可选值select。

            检索方式:立即初始化与当前对象关联的对象,该检索策略只对Session的load()和get()方法有效。当同时采用延迟检索和迫切左外连接检索策略时,后者将覆盖掉前者。

            优点:无论当前对象处于持久化状态,还是游离状态,都可以方便地从当前对象导航到与之关联的对象,并且比立即检索策略执行的select语句少,只执行一条select语句。

            缺点:可能加载程序中不需要的对象,增加了缓存的占用率;复杂的select语句会影响检索性能。

           优先考虑使用的场合

                   一对一或者多对一关联;

                   在程序中需要立即访问关联对象;

                   具有良好的数据表结构

二、批量检索(batch-size)

        在映射一对多关联时,还可以通过hibernate提供的批量检索功能,实现批量检索数据,减少执行select语句的条数,从而减少访问数据库的次数,提升软件的性能。

        批量检索功能需要和立即检索或者延迟检索策略联合使用,通过配置<set>元素的batch-size属性实现,该属性的可选值为正整数,默认值为1,在默认的情况下,初始化每个当前对象的所有关联对象都要执行一个select语句,如果设为2,执行一条select语句则可以初始化包括当前对象在内的两个对象的所有关联对象(不过增加了select语句的复杂度),这从理论上讲,在完成同样功能的情况下可以减少执行一半的select语句,不过batch-size属性的值也不要设置太大,经验表明batch-size属性的合理取值在2-10之间,如果设置过大,复杂的select语句也会影响对象的加载速度,如果是采用延迟检索策略,还会降低延迟检索策略的意义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值