hibernate join fetch
2013-05-21 06:16
330 查看
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.
鉴定完毕。
相关文章推荐
- Hibernate 抓取策略fetch-1 (select join subselect)
- hibernate 的left join fetch可以取出lazy对象
- Hibernate中hbm.xml文件的inverse、cascade、fetch、outer-join、lazy
- hibernate join fetch
- hibernate join fetch lazy 你懂了么,反正我已经凌乱了,今天整理一下,转载一下人家的文章吧
- hibernate 中left join 与left join fetch ,right join与right join fetch 等的区别
- hibernate抓取策略fetch=select /join/subselect
- hibernate抓取策略fetch=select /join/subselect
- Join用法,HQL的方法,Hibernate中的fetch
- Hibernate的fetch="join"和fetch="select"
- Hibernate的fetch="join"和fetch="select" 的一点搜集
- Hibernate的fetch="join"和fetch="select"
- Hibernate逍遥游记-第7章 Hibernate的检索策略和检索方式(<set lazy="false" fetch="join">、left join fetch、FetchMode.JOIN、)
- hibernate抓取策略fetch=select /join/subselect
- Hibernate中的fetch, lazy, outer-join,inverse和cascade作用
- 简述hibernate left join fetch的作用
- Hibernate的fetch="join" 和 fetch="select" 的一点搜集
- hibernate join fetch[转载]
- Hibernate5-1对多(1:n)-fetch="join"
- Hibernate的fetch="join"和fetch="select" 的一点搜集