hibernate join fetch
那天去了达内,试听了2个小时的课,刚好讲的他们的当当网项目,讲hibernate表关系映射这段来了,不过也够呛,投影仪看的眼睛点都不舒服,当时讲的也没认真听,听了个大概,就记住那个老师一句话了,说是有经验的人用的,一般人不告诉,就是说这个join fetch 用法,回来查了一下,用起来比较爽,今晚突然来了兴致,小记一下。
join fetch 其实是相当于 数据库 里面的连接部分。默认是inner join 。也支持left outer join。
join fetch 主要是运用于 HQL 中。
主要体现在一对多、多对多的关系表中
例如:
class Student{
private int id;
private int name;
private Team team;
get{…} ; set{…};
}
class Team{
private int tid;
private String name;
private Set<Student> students;
get{…}; set{…}';
}
默认查询Team 的时候,fetch=lazy,不会去查询 Team 中所有的Student.
----------------查询---------------------
Team t=(Team)session.load(Team.class, 3);
Set<Student> sets=t.getStudents();
for(Student s:sets){
System.out.println(s.getId()+" "+s.getName());
}
----------------查询结果-----------------
Hibernate:
select
team0_.cid as cid0_0_,
team0_.name as name0_0_
from
team0_
where
team0_.cid=?
Hibernate:
select
students0_.cid as cid0_1_,
students0_.id as id1_,
students0_.id as id1_0_,
students0_.cid as cid1_0_,
students0_.name as name1_0_
from
Student students0_
where
students0_.cid=?
-----------------------------------------
所以会去查询2次,第一次去查询指定的Team,第二次会查询指定Team下所有的Student.
使用Join fetch 是为了减少查询的次数。
----------------查询---------------------
List<Class> lists = session.createQuery("from Team t join fetch c.students order by t.cid").list();
for(Team t : lists){
System.out.println(t.getCid()+ " "+t.getName()+" ");
for(Student s:t.getStudents()){
System.out.println(" "+s.getId()+" "+ s.getName() +" "+s.getTeam().getCid());
}
}
----------------查询结果-----------------
Hibernate:
select
team0_.cid as cid0_0_,
students1_.id as id1_1_,
team0_.name as name0_0_,
students1_.cid as cid1_1_,
students1_.name as name1_1_,
students1_.cid as cid0_0__,
students1_.id as id0__
from
team class0_
inner join
Student students1_
on team0_.cid=students1_.cid
order by
team0_.cid
-----------------------------------------
结果发现只发错一条SQL语句。经鉴定,Join fetch 是为了用来减少查询次数的。
实质是就是使用了数据库的join.
鉴定完毕。
转载于:https://www.cnblogs.com/huangjingzhou/articles/1876213.html
hibernate join fetch相关推荐
- hibernate left join fetch 出错的问题
1.首先说说manyToOne的问题 比如一个用户所在的组织机构,可能是多个,最多是四个,然后userEntity有下的代码: 关联查询: 第一种方式:代码如下 StringBuilder sql = ...
- Hibernate的fetch
hibernate抓取策略fetch具体解释 一.hibernate抓取策略(单端代理的批量抓取fetch=select(默认)/join) 測试用例: Student student = (Stud ...
- FW: How to use Hibernate Lazy Fetch and Eager Fetch Type – Spring Boot + MySQL
原帖 https://grokonez.com/hibernate/use-hibernate-lazy-fetch-eager-fetch-type-spring-boot-mysql In the ...
- left join fetch 用法实例记录
left join fetch 应用:查找BusinessVersion表中的信息时同时抓取关联的BusinessOrganInfo信息,记录下来以备后用: BusinessVersion.java ...
- Hibernate5-多对1(n:1)-fetch=join
1.创建项目,项目名称hibernatedemo26,目录结构如图所示 2.在项目中创建lib目录存储jar文件,目录结构如图所示 3.在src目录中创建实体类Forum,包名(com.mycompa ...
- Hibernate(十三)迫切内连接fetch
迫切内连接fetch 内连接和迫切内连接的区别: 其主要区别就在于封装数据,因为他们查询的结果集都是一样的,生成底层的SQL语句也是一样的. 1.内连接:发送就是内连接的语句,封装的时候将属于各自对象 ...
- Hibernate中的fetch
fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形 ...
- hibernate fetch属性
2019独角兽企业重金招聘Python工程师标准>>> Hibernate的fetch="join"和fetch="select" 的一点分析 ...
- Hibernate之检索方式
时间:2017-1-22 16:09 --检索方式 Hibernate中提供了以下几种检索对象的方式: * 导航对象图检索方式 根据已经加载额对象导航到其他对象. ...
最新文章
- JAR文件——2017.08.04
- mpvue开发小程序分享朋友圈无法自定义标题解决方法
- 北大青鸟c语言课后答案,北大青鸟C语言教程--第一章 C语言基础.ppt
- ASP.Net快速开发新闻系统 在线播放
- Spring获取JavaBean的xml形式和注解形式
- 【elasticsearch系列】安装elasticsearch-head插件
- (49)System Verilog字符串string详解
- 它们才是真正的数学家 寻找自然界中的数学
- html类名定义规则_好程序员分享Java语言中的标识符规则
- linux salt命令 -e,Linux记录-salt命令
- caffe编译关于imread问题的解决
- UBUNTU使用GITHUB
- android 模拟内存不足,雷电模拟器内存不足怎么办?雷电安卓模拟器怎么修改内存大小?...
- 德雷塞尔大学计算机科学专业,美国大学计算机科学专业排名如何
- My Forty-eighth Page - 组合 - By Nicolas
- 分门别类刷leetcode——链表(C++实现)
- 微信企业号开发模式的PHP代码
- Spring源码解析(五)-Bean的实例化流程(上)
- 数据查询和业务流分开_一文带你了解大数据管道
- 投影向量计算公式的推导
热门文章
- abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...
- java 购物车价格类型_WooCommerce - 为购物车中的每个产品添加自定义价格
- mysql 附近3公里的_mysql搜寻附近N公里内数据的实例
- 0基础小白学好JAVA的5个方法
- 和12岁小同志搞创客开发:手撕代码,做一款遥控灯
- 和12岁小同志搞创客开发:如何驱动LED数码管?
- RTD 比率式温度测量传感器设计思路
- 10行Python代码实现Web自动化管控
- 洛谷P1896 [SCOI2005]互不侵犯 状压dp+位运算
- python图像中如何显示中文