Hibernate优化---抓取策略

Posted zy-luo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate优化---抓取策略相关的知识,希望对你有一定的参考价值。

1.延迟加载

   类的延迟加载

       在类的映射文件中的class标签上配置lazy属性:默认为true,当你配置为false的时候,就算你使用session.load他也会在你调用这个方法之后发送SQL语句,而不是在你使用查询得到的对象的时候才发送SQL语句

   关联级别的延迟加载

       在类的映射文件中的set和many-to-one上配置lazy属性:默认为true,也就是说,当你查询某个对象是,他不会连带着查询他的关联对象,当你使用这些关联对象的时候才会发送SQL语句查询

2.抓取策略

   set上的fetch和lazy

        fetch是用于控制sql语句格式的:取值---join,select(默认值),subselect,当使用join的时候lazy失效,以为查询对象的时候他第一条sql语句是select A join B on.....所以会一次性将关联对象也查出来。当取值为subselect时,查询多个对象及其关联对象时,发送的是一条嵌套查询的sql语句。select为默认值,情况和关联级别的延迟加载类似,不过多了一个取值extra,及其懒惰,当你选取这个值的时候,输出关联类的某个属性,他只会单独查询这个属性,而不是所以属性都差出来

   many-to-one上的fetch和lazy

       作用和set中的一样,只是fetch取值只有select和join,用法也一样,lazy取值为proxy,false,no-proxy(基本上不用),取值为proxy时,是否延迟加载取决于与之对应的类中的class上的lazy,例如:客户与联系人之间存在一对多关系,联系人映射文件中的many-to-one上的lazy为proxy,查询联系人时是否延迟加载客户,就取决去客户映射文件中class上的lazy

3.批量抓取

在set中设置batch-size="查询数量",当你查出客户列表,遍历客户get其联系人的时候会一次性查询多个客户的联系人,而不是每个客户的联系人都查询一次

以上是关于Hibernate优化---抓取策略的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate - HQL_QBC查询详解--抓取策略优化机制

hibernate查询&抓取策略优化机制

框架 day33 Hibernate,组件映射,继承映射,抓取(检索)策略-优化,检索方式总结

Hibernate的抓取策略(优化)

Hibernate(十四)抓取策略

Hibernate 原汁原味的四种抓取策略(转)