问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

联系检索实际,以一种检索工具为例,说明如何调整检索策略,以达到满意的检索效果

发布网友 发布时间:2023-04-09 22:37

我来回答

1个回答

热心网友 时间:2023-09-12 01:28

类级别检索策略有立即检索和延迟检索,默认的检索策略是立即检索。在Hibernate映射文件中,通过在<class>上配置lazy属性来确定检索策略。对于Session的检索方式,类级别检索策略仅适用于load方法;也就说,对于get、qurey检索,持久化对象都会被立即加载而不管lazy是false还是true.一般来说,我们检索对象就是要访问它,因此立即检索是通常的选择。由于load方法在检索不到对象时会抛出异常(立即检索的情况下),因此我个人并不建议使用load检索;而由于<class>中的lazy属性还影响到多对一及一对一的检索策略,因此使用load方法就更没必要了。

关联级别检索策略有立即检索、延迟检索和迫切左外连接检索。对于关联级别检索,又可分为一对多和多对多、多对一和一对一两种情况讨论。

一对多和多对多关联关系一般使用<set>配置。<set>有lazy和outer-join属性,它们的不同取值绝对了检索策略。

1)立即检索:这是一对多默认的检索策略,此时lazy=false,outer-join=false.尽管这是默认的检索策略,但如果关联的集合是无用的,那么就不要使用这种检索方式。

2)延迟检索:此时lazy=true,outer-join=false(outer-join=true是无意义的),这是优先考虑的检索方式。

3)迫切左外连接检索:此时 lazy=false,outer-join=true,这种检索策略只适用于依靠id检索方式(load、get),而不适用于query的集合检索(它会采用立即检索策略)。相比于立即检索,这种检索策略减少了一条sql语句,但在Hibernate中,只能有一个<set>配置成 outer-join=true.

多对一和一对一检索策略一般使用<many-to-one>、<one-to-one>配置。<many-to-one>中需要配置的属性是 outer-join,同时还需要配置one端关联的<class>的lazy属性(配置的可不是<many-to-one>中的lazy哦),它们的组合后的检索策略如下:

1) outer-join=auto:这是默认值,如果lazy=true为延迟检索,如果lazy=false为迫切左外连接检索。

2) outer-join=true,无关于lazy,都为迫切左外连接检索。

3) outer-join=false,如果lazy=true为延迟检索,否则为立即检索。

可以看到,在默认的情况下(outer-join=auto,lazy=false),对关联的one端对象Hibernate采用的迫切左外连接检索。依我看,很多情况下,我们并不需要加载one端关联的对象(很可能我们需要的仅仅是关联对象的id);另外,如果关联对象也采用了迫切左外连接检索,就会出现select语句中有多个外连接表,如果个数多的话会影响检索性能,这也是为什么Hibernate通过hibernate.max_fetch_depth属性来控制外连接的深度。对于迫切左外连接检索,query的集合检索并不适用,它会采用立即检索策略。

对于检索策略,需要根据实际情况进行选择。对于立即检索和延迟检索,它们的优点在于select语句简单(每张表一条语句)、查询速度快,缺点在于关联表时需要多条select语句,增加了访问数据库的频率。因此在选择即检索和延迟检索时,可以考虑使用批量检索策略来减少select语句的数量(配置batch-size属性)。对于切左外连接检索,优点在于select较少,但缺点是select语句的复杂度提高,多表之间的关联会是很耗时的操作。另外,配置文件是死的,但程序是活的,可以根据需要在程序里显示的指定检索策略(可能经常需要在程序中显示指定迫切左外连接检索)。为了清楚检索策略的配置效果如何,可以配置show_sql属性查看程序运行时Hibernate执行的sql语句。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么我的《英雄传说:空之轨迹SC》中“艾尔贝周游道的通缉魔兽”不见... 空之轨迹sc 托兰特平原的通缉魔兽二号 我是2兆的宽带 原先的下载速度达到260KB/S 重装下系统最高还不到70K... 为什么两兆的线下载速度只有80KB/S 我们家宽带是网通的办理了2兆的可是下载速度70~90KB 原因 一九八三年大年三十是什么星座 请教1984年2月1日出生而且阴历生日正好是大年三十,请问我岁是多大 万岱鸿腾国际商贸有限公司送表真的吗 云南岱鸿商贸有限公司怎么样? 重庆鸿岱科技有限公司怎么样? 调整检索策略时需要重新分析信息需求吗 检索策略有哪几个步骤? 如果检索结果过少查全率很低需要调整检索范围此时调整检索策略的方法有什么 在北京注册公司大概需要多久可以办理好呢? 物欲的引证解释物欲的引证解释是什么 聋哑盲语言教学的简介 重庆网站建设公司,哪家好 结肠水疗仪宣传手册内容怎么写 重庆网站建设公司有哪些,哪个比较好啊 国王游戏结局男主是被女主用电锯把头锯下来了吗 彤云的拼音狐彤云的拼音是什么 广汽丰田送的行车记录仪是什么牌子 老电视剧,宋如歌是 你有什么优秀的插画作品推荐? 如歌的岁月电视剧好看吗 豆皮和大豆含油一样吗 人参鸡汤里放萝卜 人参炖鸡可以吃白罗卜吗 韩剧无人知晓是腐剧吗 上面夫字两边两点,下面一个鱼是什么字? 您好,我想投资一个小的液化气站想知道需要多少钱? 2018吉利帝豪原厂自带记录仪使用方法 吉利星瑞行车记录仪多少像素的 蜜袋鼯为什么喜欢吃蚕蛹 小肠太干净了灌香肠是不是不香了 灌香肠放的白酒不香怎么回事 我做的腊肠为什么会不香 四川鑫通财信息技术有限公司怎么样? 网站推广方法都有哪些 商业特许经营备案流程是怎样的? 特许经营许可证备案 夏洛的网电影有国语的吗 中药店标志由什么组成的? 5.设计实验,如何确定中药饮片的质量标志物? 当检索结果为零时怎样调整检索策略 如果检索结果过少查全率很低需要调整检索范围此时调整检索策略的方法有什么 需要扩大检索范围时,如何调整检索策略? 信息化的意义 洋务运动中的李鸿章创办了那些企业? 风花雪月的是什么动物