抓取策略:

  为了改变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. Gravitee.io alert 引擎架构

    alert 在我们的实际开发中应用的场景很多,我们需要进行系统状态的查看,以及特殊异常请求的处理 参考架构图 从下图可以看出,还是很方便的,同时支持slack email... 的实时消息通知,而且我 ...

  2. 谈谈在 .Net 平台上的 软件生态 和 软件生产力

    我们可以先看看这篇文章 : <看 StackOverflow 如何用 25 台服务器撑起 5.6 亿的月 PV>    http://www.nowamagic.net/librarys/ ...

  3. Package has no installation candidate解决方法

    今天在安装软件的时候出现了Package has no installation candidate的问题,如:# apt-get install <packagename>Reading ...

  4. Go sql insert update使用举例

    本文结合使用场景简单介绍sql中的insert.update的使用. 以下是代码: 如果记录已经存在,则更新,否则插入新记录. package main import ( "database ...

  5. Linux paste命令详解

    Linux paste命令 Linux paste命令用于合并文件的列.paste指令会把每个文件以列对列的方式,一列列地加以合并 将每个指定文件里的每一行整合到对应一行里写到标准输出,之间用制表符分 ...

  6. [MySQL FAQ]系列 — processlist中哪些状态要引起关注 解决mysql cpu过高问题

    show processlist; 一般而言,我们在processlist结果中如果经常能看到某些SQL的话,至少可以说明这些SQL的频率很高,通常需要对这些SQL进行进一步优化. 今天我们要说的是, ...

  7. Tomcat里面的APR配置问题研究

    这里,之所以研究这个问题,是因为我们的生产系统Linux环境下的tomcat日志里面,启动信息的地方有这么一个WARNING. INFO: The APR based Apache Tomcat Na ...

  8. 用shell脚本生成日志文件

    mdate=`date +%R-%d-%m-%Y` LogFile=/root/HDstatusLog.log echo disk is good! $mdate >> $LogFile ...

  9. 【java】private关键字

     private关键字(1)修饰成员:可以修饰成员变量和成员方法(2)特点:被private修饰的后的成员只能在本类中被访问 (3)private的应用:定义类的时候,当把成员变量给private修饰 ...

  10. oracle数据库使用小结

    select * from r_patient a where a.birthdate= to_date('1953-03-01','yyyy-mm-dd');select * from r_pati ...