zoukankan      html  css  js  c++  java
  • Hibernate 中lazy的作用

    Hibernate 中lazy的作用

    上一篇 / 下一篇  2009-06-24 20:02:20 / 个人分类:java

    <many-to-one name="departmentInfo" class="com.plane.beans.DepartmentInfo" lazy="false" fetch="select">

    延迟加载

    比如查询一张表时,有外键对应另一张表
    可以使用延迟加载
    这样就不会把外键对应表的数据加载

    =======================================

    lazy是延迟加载,默认是延迟加载。
    主要是为了系统的性能,当一张表引用到另外一张表时,如果不是立即需要另外一张表的内容,就可以采取延迟加载,直到要用到时才加载另外一张表。

    ===========================================

    lazy是延迟加载,默认是延迟加载。 延迟加载的作用就是增加系统的性能度,得到你想要的数据,你不想要的数据不会给你查出来

    ================================================

    其实手动延迟加载比较好,又提高了系统的性能,想要的时候就加载,不要就不用具体如下:在取数据的时候代码中写一段就行:
    Hibernate.initialize(s.getGradeclass());就行,就代表对象s中加载gradeclass这张表的数据!

    ================================================
    fetch 和 lazy 主要是用来级联查询的,
    而 cascade 和 inverse 主要是用来级联插入和修改的      
       fetch参数指定了关联对象抓取的方式是select查询还是join查询,
    select方式时先查询返回要查询的主体对象(列表),再根据关联外键 id,
    每一个对象发一个select查询,获取关联的对象,形成n+1次查 询;
    而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
    如果你的关联对象是延迟加载的,它当然不会去查询关联对象。 另外,在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用 select方式,除非你在hql中指定join fetch某个关联对象。fetch策略用于定义 get/load一个对象时,如何获取非lazy的对象/集合。 这些参数在Query中无效。
    ========================================================
       fetch 和 lazy 主要是用来级联查询的,   而 cascade 和 inverse 主要是用来级联插入和修改的

          inverse 属性默认是false的,表示由己方来维护关系。cascade="all" 时候能级联操作(all指定了操作的程度),而none的时候只是维持两者之间的关系(如果inverse="false")
          在一对多映射中,一的一方要设<set inverse="true" casecade="save-update" />,多的一方要设<many-to-one inverse=false />

         inverse=true作用: 这里关系是由儿子维护的,所以如果只是往父亲里加入儿子,不给儿子设置父亲的话session.save(parent),就不会保存儿子!

          因为父亲有个孩子的集合,他无法知道哪个孩子的父亲id已经指向自己了,所以对于每一个孩子,都要更新父亲使他只想自己,而这个关系由孩子维护就好多了, 每个孩子只有一个父亲,只有设置过的才需要更新,所以显然,这个父子关系由孩子来维护比较省力.减轻了数据库的负担

          fetch参数指定了关联对象抓取的方式是select查询还是 join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成 n+1次查询;而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。如果同时fetch="join" lazy="true"经过测试发现fetch有效。另外,在hql查询中配置文件中设置的join方式某些情况下是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用select方式,除非你在hql中指定join fetch某个关联对象。
  • 相关阅读:
    Spring Boot之发送HTTP请求(RestTemplate详解)
    Spring Boot之拦截器与过滤器(完整版)
    Spring中的数据库事物管理
    客户端传入数据的校验-RestController进阶
    拦截器 应用详解--SpringMVC
    MyBatis学习笔记
    oracle数据库之rownum和rowid用法
    Oracle数据库之分组查询及排序
    oracle数据库之子查询
    oracle数据库之组函数
  • 原文地址:https://www.cnblogs.com/yanzi629/p/2854846.html
Copyright © 2011-2022 走看看