Hibernate 抓取策略
抓取策略:
为了改变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 抓取策略的更多相关文章
- Hibernate 抓取策略fetch-1 (select join subselect)
原文 :http://4045060.blog.51cto.com/4035060/1088025 部分参考:http://www.cnblogs.com/rongxh7/archive/2010/0 ...
- 029 hibernate抓取策略
实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置ba ...
- hibernate抓取策略
抓取策略(fetching strategy) 是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的 ...
- 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 ...
- Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)
假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=H ...
- 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】
一.抓取策略. 1.hibernate中提供了三种抓取策略. (1)连接抓取(Join Fetch):这种抓取方式是默认的抓取方式.使用这种抓取方式hibernate会在select中内连接的方式获取 ...
- 【Hibernate 8】Hibernate的调优方法:抓取策略
在上一篇博客中,介绍了Hibernate的缓存机制.合理的配置缓存,可以极大程度上优化Hibernate的性能.这篇博客,介绍另外一个调优方式:抓取策略. 一.什么是抓取策略 抓取策略(fetchin ...
- Hibernate中的多表查询及抓取策略
1.Hibernate中的多表查询 1.1SQL中的多表查询 [交叉连接] select * from A,B; [内连接] 显示内连接:inner join(inner 可以省略) Select * ...
- Hibernate框架笔记04HQL_QBC查询详解_抓取策略优化机制
目录 1. Hibernate的查询方式 1.1 方式一:OID查询 1.2 方式二:对象导航查询 1.3 方式三:HQL方式 1.4 方式四:QBC查询 1.5 方式五:SQL查询 2. 环境搭建 ...
随机推荐
- tile38 一款开源的geo 数据库
tile38 是基于golang 编写的geo 数据库,支持地理空间索引.实时地理围栏,同时也支持leader-flower 的部署模型 备注: 下边测试一个简单的地理围栏功能 环境准备 docker ...
- NPOI之Excel——合并单元格、设置样式、输入公式、设置筛选等
首先建立一个空白的工作簿用作测试,并在其中建立空白工作表,在表中建立空白行,在行中建立单元格,并填入内容: //建立空白工作簿 IWorkbook workbook = new HSSFWorkboo ...
- Linux服务器定位CPU高占用率代码位置经历
http://blog.csdn.net/zhu19774279/article/details/51303000
- MySQL插入,更新,删除数据
插入 单行插入 1.insert into 表名 values(col1_value,col2_value,...); 每个列必须提供一个值,如果没有值,要提供NULL值 每个列必须与它在表中定义的次 ...
- Python __slots__的使用
每个类在实例化时都会被分配一个dict,通过 实例.__dict__来访问,dict记录了实例的所有属性 如: class Man(object): pass man = Man()print(man ...
- Reactor/Proactor的比较 (ZZ)
一般情况下,I/O 复用机制需要事件分享器(event demultiplexor [1.3]). 事件分享器的作用,即将那些读写事件源分发给各读写事件的处理者,就像送快递的在楼下喊: 谁的什么东西送 ...
- [转]一个故事讲清楚NIO
假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) 职员打印票据,并将钱和票据返回给 ...
- Ansible Ad-Hoc命令(三)
一.Ad-Hoc 介绍 1.了解下什么是Ad-Hoc ? Ad-Hoc 其实就是基于Ansible 运行的命令集,有些类似终端中敲入的shell命令,Ansible提供了两种运行完成任务的方式,一种是 ...
- 银行卡所属公司判断 参考自https://blog.csdn.net/well2049/article/details/79429130
在网上找到了一个银行卡的验证,通过阿里的支付宝接口进行校验,能够准确识别是否存在,归属行,卡号类型是储蓄卡(DC)还是信用卡(CC). 接口api:需要传入的2个参数,卡号cardNo和cardBin ...
- python 计算校验和
校验和是经常使用的,这里简单的列了一个针对按字节计算累加和的代码片段.其实,这种累加和的计算,将字节翻译为无符号整数和带符号整数,结果是一样的. 使用python计算校验和时记住做截断就可以了. 这里 ...