• hibernate的 lazy 和 fetch 一般配置


    fetch 和 lazy 配置用于数据的查询
    
    lazy 参数值常见有 false 和 true,Hibernate3 映射文件中默认lazy = true ;
    
    fetch 指定了关联对象抓取的方式,参数值常见是select和join,默认是select, select方式先查询主对象,再根据关联外键,每一个对象发一个select查询,获取关联的对象,形成了n+1次查询;而join方式,是left outer join查询,主对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
    
    在映射文件中,不同的组合会使用不同的查询:
    1、lazy="true" fetch = "select" ,使用延迟策略,开始只查询出主对象,关联对象不会查询,只有当用到的时候才会发出sql语句去查询 ;
     
    2、lazy="false" fetch = "select" ,没有用延迟策略,同时查询出主对象和关联对象,产生1+n条sql. 
    
    3、lazy="true"或lazy="false" fetch = "join",延迟都不会作用,因为采用的是外连接查询,同时把主对象和关联对象都查询出来了.
    
    另外,在hql查询中,配置文件中设置的join方式是不起作用的,而在其他查询方式如get、criteria等是有效的,使用 select方式;除非在hql中指定join fetch某个关联对象。fetch策略用于get/load一个对象时,如何获取非lazy的对象/集合。 这些参数在Query中无效。
    
    配置还是缺乏灵活性的,开发中常会有不同的需求,所以在配置中选择默认值,在具体业务中来指定策略。再者对数据库的操作都是使用SQL来执行的,掌握了sql执行性能反过来看这些配置也许很容易了。
    来自:http://iask.sina.com.cn/b/18302523.html
  • 相关阅读:
    CentOS 7.3 CDH 5.10.0 Druid0.12.4安装记录
    cloudera manager卸载流程
    CDH5.10.0 离线安装(共3节点) 转
    CentOS 7 安装Httpd(转)
    CentOS下MySQL的彻底卸载
    CentOS7 修改主机名
    sendEvent()
    QSignalMapper Class
    ubuntu12.04开启虚拟机的unity模式
    BCM_I2C函数更改
  • 原文地址:https://www.cnblogs.com/JamKong/p/4482936.html
Copyright © 2020-2023  润新知