抓取策略:

  为了改变SQL语句执行的方式

  当应用程序需要在Hibernate实体对象的关联关系间进行导航的时候,Hibernate如何获取关联对象的策略

  抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL或Criteria Query中重载声明

  Hibernate的抓取策略只影响get | load方法,对HQL是不影响的

  参考链接:http://www.cnblogs.com/crazylqy/p/4081459.html

  select fetching:

    默认执行多条sql语句

    可配置在多方

<set name="orders" cascade="save-update, delete" fetch="select">
Hibernate:
select
customer0_.c_id as c_id1_0_0_,
customer0_.c_name as c_name2_0_0_,
customer0_.c_gender as c_gender3_0_0_,
customer0_.c_age as c_age4_0_0_,
customer0_.c_level as c_level5_0_0_
from
t_customer customer0_
where
customer0_.c_id=?
Hibernate:
select
orders0_.customer_id as customer4_1_0_,
orders0_.id as id1_1_0_,
orders0_.id as id1_1_1_,
orders0_.orderno as orderno2_1_1_,
orders0_.product_name as product_3_1_1_,
orders0_.customer_id as customer4_1_1_
from
t_order orders0_
where
orders0_.customer_id=?
[com.roxy.hibernate.pojo.Order@20765ed5]

    join fetching:

      执行左外连接的SQL语句

      如果在多方查询时 配置,则延迟加载不会生效

 <set name="orders" cascade="save-update, delete" fetch="join">
Hibernate:
select
customer0_.c_id as c_id1_0_0_,
customer0_.c_name as c_name2_0_0_,
customer0_.c_gender as c_gender3_0_0_,
customer0_.c_age as c_age4_0_0_,
customer0_.c_level as c_level5_0_0_,
orders1_.customer_id as customer4_1_1_,
orders1_.id as id1_1_1_,
orders1_.id as id1_1_2_,
orders1_.orderno as orderno2_1_2_,
orders1_.product_name as product_3_1_2_,
orders1_.customer_id as customer4_1_2_
from
t_customer customer0_
left outer join
t_order orders1_
on customer0_.c_id=orders1_.customer_id
where
customer0_.c_id=?
[com.roxy.hibernate.pojo.Order@17f9344b]

    subselect fetching:

      使用子查询查询关联数据

<set name="orders" cascade="save-update, delete" fetch="subselect">
Hibernate: 
    select
        customer0_.c_id as c_id1_0_,
        customer0_.c_name as c_name2_0_,
        customer0_.c_gender as c_gender3_0_,
        customer0_.c_age as c_age4_0_,
        customer0_.c_level as c_level5_0_
    from
        t_customer customer0_
Hibernate:
    select
        orders0_.customer_id as customer4_1_1_,
        orders0_.id as id1_1_1_,
        orders0_.id as id1_1_0_,
        orders0_.orderno as orderno2_1_0_,
        orders0_.product_name as product_3_1_0_,
        orders0_.customer_id as customer4_1_0_
    from
        t_order orders0_
    where
        orders0_.customer_id in (
            select
                customer0_.c_id
            from
                t_customer customer0_
        )

  

Hibernate 抓取策略的更多相关文章

  1. Hibernate 抓取策略fetch-1 (select join subselect)

    原文 :http://4045060.blog.51cto.com/4035060/1088025 部分参考:http://www.cnblogs.com/rongxh7/archive/2010/0 ...

  2. 029 hibernate抓取策略

    实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置ba ...

  3. hibernate抓取策略

    抓取策略(fetching strategy) 是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的 ...

  4. Hibernate 抓取策略fetch-2 (批量抓取batch-size以及hibernate.jdbc.fetch_size、hibernate.jdbc.batch_size)

    类关系: User N~1 Group 测试代码: System.out.println("1"); List stuList = session.createQuery(&quo ...

  5. Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)

    假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=H ...

  6. 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】

    一.抓取策略. 1.hibernate中提供了三种抓取策略. (1)连接抓取(Join Fetch):这种抓取方式是默认的抓取方式.使用这种抓取方式hibernate会在select中内连接的方式获取 ...

  7. 【Hibernate 8】Hibernate的调优方法:抓取策略

    在上一篇博客中,介绍了Hibernate的缓存机制.合理的配置缓存,可以极大程度上优化Hibernate的性能.这篇博客,介绍另外一个调优方式:抓取策略. 一.什么是抓取策略 抓取策略(fetchin ...

  8. Hibernate中的多表查询及抓取策略

    1.Hibernate中的多表查询 1.1SQL中的多表查询 [交叉连接] select * from A,B; [内连接] 显示内连接:inner join(inner 可以省略) Select * ...

  9. Hibernate框架笔记04HQL_QBC查询详解_抓取策略优化机制

    目录 1. Hibernate的查询方式 1.1 方式一:OID查询 1.2 方式二:对象导航查询 1.3 方式三:HQL方式 1.4 方式四:QBC查询 1.5 方式五:SQL查询 2. 环境搭建 ...

随机推荐

  1. tile38 一款开源的geo 数据库

    tile38 是基于golang 编写的geo 数据库,支持地理空间索引.实时地理围栏,同时也支持leader-flower 的部署模型 备注: 下边测试一个简单的地理围栏功能 环境准备 docker ...

  2. NPOI之Excel——合并单元格、设置样式、输入公式、设置筛选等

    首先建立一个空白的工作簿用作测试,并在其中建立空白工作表,在表中建立空白行,在行中建立单元格,并填入内容: //建立空白工作簿 IWorkbook workbook = new HSSFWorkboo ...

  3. Linux服务器定位CPU高占用率代码位置经历

    http://blog.csdn.net/zhu19774279/article/details/51303000

  4. MySQL插入,更新,删除数据

    插入 单行插入 1.insert into 表名 values(col1_value,col2_value,...); 每个列必须提供一个值,如果没有值,要提供NULL值 每个列必须与它在表中定义的次 ...

  5. Python __slots__的使用

    每个类在实例化时都会被分配一个dict,通过 实例.__dict__来访问,dict记录了实例的所有属性 如: class Man(object): pass man = Man()print(man ...

  6. Reactor/Proactor的比较 (ZZ)

    一般情况下,I/O 复用机制需要事件分享器(event demultiplexor [1.3]). 事件分享器的作用,即将那些读写事件源分发给各读写事件的处理者,就像送快递的在楼下喊: 谁的什么东西送 ...

  7. [转]一个故事讲清楚NIO

    假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) 职员打印票据,并将钱和票据返回给 ...

  8. Ansible Ad-Hoc命令(三)

    一.Ad-Hoc 介绍 1.了解下什么是Ad-Hoc ? Ad-Hoc 其实就是基于Ansible 运行的命令集,有些类似终端中敲入的shell命令,Ansible提供了两种运行完成任务的方式,一种是 ...

  9. 银行卡所属公司判断 参考自https://blog.csdn.net/well2049/article/details/79429130

    在网上找到了一个银行卡的验证,通过阿里的支付宝接口进行校验,能够准确识别是否存在,归属行,卡号类型是储蓄卡(DC)还是信用卡(CC). 接口api:需要传入的2个参数,卡号cardNo和cardBin ...

  10. python 计算校验和

    校验和是经常使用的,这里简单的列了一个针对按字节计算累加和的代码片段.其实,这种累加和的计算,将字节翻译为无符号整数和带符号整数,结果是一样的. 使用python计算校验和时记住做截断就可以了. 这里 ...