- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第七章Hibernate高级特性本章目标了解Hibernate检索策略掌握Hibernate延迟加载了解Hibernate缓存机制掌握Hibernate缓存配置方式本章简介在前面的内容中,我们探讨了Hibernate的基础使用技术。通过对这些基础技术的把握,我们即可开始进行基于Hibernate的持久层开发。然而,在这些应用技术之后,存在着怎样的运行机制以及其内部实现方式对应用层可能产生怎样的影响,则是我们下面需要关注的问题。类级别检索策略和关联级别检索策略类级别检索策略又分为立即检索和延迟检索两类,默认的检索策略是立即检索。在Hibernate映射文件中,通过在class上配置lazy属性来确定检索策略。对于Session的检索方式,类级别检索策略仅适用于load()方法,也就说,对于get检索和query检索,持久化对象都会被立即加载而不管lazy的值是false还是true。一般来说,我们检索对象就是要访问它,因此立即检索是通常的选择。由于load()方法在检索不到对象时会抛出异常(立即检索的情况下),因此编者不建议使用load检索。而且,由于class中的lazy属性还影响到多对一及一对一的检索策略,因此使用load方法就更没必要了。一对多和多对多关联关系一般使用set节点配置。set节点中有lazy和outer-join属性,它们的不同取值绝定了不同的检索策略。立即检索:这是一对多默认的检索策略,此时set节点的“lazy=false”,“outer-join=false”。尽管这是默认的检索策略,但如果关联的集合是无用的,那么就不要使用这种检索方式。延迟检索:此时“lazy=true”,“outer-join=false”(outer-join=true是无意义的),这是优先考虑的检索方式。迫切左外连接检索:此时“lazy=false”,“outer-join=true”,这种检索策略只适用于依靠id检索方式(例如load、get),而不适用于query的集合检索(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哦),它们的组合后的检索策略如下:many-to-one中的“outer-join=auto”:这是默认值,如果one端关联的class的“lazy=true”则为延迟检索,如果one端关联的class的“lazy=false”则为迫切左外连接检索。many-to-one中的“outer-join=true”:无关于one端关联的class的lazy属性,都为迫切左外连接检索。many-to-one中的“outer-join=false”:如果one端关联的class的“lazy=true”则为延迟检索,否则即为立即检索。Hibernate延迟加载机制?实体对象的延迟加载集合类型的延迟加载什么是Hibernate缓存缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,其目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能。Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,Hibernate缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据,从而提高应用程序的运行性能。Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理数据源中检索,所以,把频繁使用的数据加载到缓存区后,就可以大大减少应用程序对物理数据源的访问,使得程序的运行性能明显的提升。Hibernate缓存的分类
Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。Hibernate一级缓存又称为“session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓存)。Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需
文档评论(0)