抓取策略:

  为了改变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. sqler sql 转rest api 源码解析(一)应用的启动入口

    sqler sql 转rest api 的源码还是比较简单的,没有比较复杂的设计,大部分都是基于开源 模块实现的. 说明: 当前的版本为2.0,代码使用go mod 进行包管理,如果本地运行注意gol ...

  2. 基于.NET平台常用的框架整理 【转载】

    [转载] http://www.cnblogs.com/hgmyz/p/5313983.html 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个 ...

  3. Spring Schedule实现定时任务

    applicationContext.xml 1. 增加配置 <!-- 开启定时任务 --> <task:annotation-driven /> <!-- 开启注解 - ...

  4. lsof根据端口返回进程号杀死进程的方法

    参考自:http://newmiracle.cn/?p=661 Linux shell根据端口返回进程号杀死进程的方法 kill -9 `lsof -t -i:8888` 这个就是杀死8888端口的进 ...

  5. Keras/Tensorflow训练逻辑研究

    Keras是什么,以及相关的基础知识,这里就不做详细介绍,请参考Keras学习站点http://keras-cn.readthedocs.io/en/latest/ Tensorflow作为backe ...

  6. 30 个java编程技巧(最佳实践的初学者)

    1.return 一个空的集合,而不是 null 如果一个程序返回一个没有任何值的集合,请确保一个空集合返回,而不是空元素.这样你就不用去写一大堆 ”if else” 判断null元素. Java 的 ...

  7. 【git】之push异常

    Push rejected: Push to origin/master was rejected 打开git shell面板 $ git pull origin master --allow-unr ...

  8. Hive在集群环境配置

    本文转载自:https://blog.csdn.net/hanjin7278/article/details/53035739 一.简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数 ...

  9. Espresso小试

    Espresso开源了,那就试着用一下, 1. 下载Espresso Espresso没有提供单独的jar包下载,建议clone整个项目或者下载zip包 git clone https://code. ...

  10. spring boot学习(8) SpringBoot 之切面AOP

    在方法执行的前后,切入代码:经典的service层切入事务: @Aspect注解是切面注解类 @Pointcut切点定义 @Before是方法执行前调用 @After是方法执行后调用 @AfterRe ...