1、假设我们一个班级对应多个学生
List<ClassesPojo> classes= session.createQuery("from ClassesPojo classes left join fetch classes.student2").list();
for(ClassesPojo cl:classes){
Set<Student2Pojo> students=cl.getStudent2();
for(Student2Pojo stu:students){
System.out.println(stu.getName());
}
//System.out.println(cl);
}
对于left outer join对应的hql语句为:
from ClassesPojo classes left join fetch classes.student2
查询对应的sql为:
Hibernate: select classespoj0_.id as id0_0_, student2x1_.id as id1_1_, classespoj0_.name as name0_0_, student2x1_.name as name1_1_, student2x1_.classesid as classesid1_1_, student2x1_.classesid as classesid0_0__, student2x1_.id as id0__ from classes classespoj0_ left outer join student2 student2x1_ on classespoj0_.id=student2x1_.classesid
这样就只有一个sql语句。
这样对应的结果会显示班级表所有的记录,如果班级没有学生,那么学生就为null。
2、如果使用传统的hql查询,只查询班级,那么就会产生n+1次查询,性能会很低。
-
顶
- 3