美文网首页
Hibernate之延迟加载

Hibernate之延迟加载

作者: 慧飞的蚂蚁 | 来源:发表于2018-03-01 14:32 被阅读0次

    延迟加载概念

    当Hibernate从数据库中加载某个对象时,不加载关联的对象,而只是生成了代理对象,获取使用session中的load的方法(在没有改变lazy属性为false的情况下)获取到的也是代理对象,所以在上面这几种场景下就是延迟加载。

    立即加载概念

    当Hibernate从数据库中加载某个对象时,加载关联的对象,生成的实际对象,获取使用session中的get的方法获取到的是实际对象。

    为什么要用延迟加载

    延迟加载策略能避免加载应用程序不需要访问的关联对象,以提高应用程序的性能。

    立即加载的缺点

    Hibernate在查询某个对象时,立即查询与之关联的对象,我们可以看出这种加载策略存在两大不足:

    1.select的语句数目太多,需要频繁的访问数据库,会影响查询的性能。

    2.在应用程序只需要访问要的对象,而不需要访问与他关联的对象的场景下,加载与之关联的对象完全是多余的操作,这些多余的操作是会占内存,这就造成了内存空间的浪费。

    什么情况下用延迟加载什么情况下用立即加载

    如果程序加载一个持久化对象的目的是为访问他的属性,则可以采用立即加载。如果程序加载一个持久化对象的目的仅仅是为了获得他的引用,则可以采用延迟加载。

    加载策略的配置

    类级别

    元素中lazy属性的可选值为true(延迟加载)和false(立即加载);

    元素中的lazy属性的默认值为true

    一对多关联级别

    元素中的lazy属性的可选值为:true(延迟加载),extra(增强延迟加载)和false(立即加载);

    元素中的lazy属性的默认值为true

    多对一关联级别

    元素中lazy属性的可选值为:proxy(延迟加载),no-proxy(无代理延迟加载)和false(立即加载)

    元素中的lazy属性的默认值为proxy

    相关文章

      网友评论

          本文标题:Hibernate之延迟加载

          本文链接:https://www.haomeiwen.com/subject/frbgxftx.html