hibernate join fetch

来源:互联网 发布:php网站培训班 编辑:程序博客网 时间:2024/06/05 09:08
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
-----------------------------------------
原创粉丝点击