一 简介
可以在sql中,我们经常使用子查询处理复杂的查询要求,在hql中,我们一样可以使用子查询来完成复杂查询要求:
二 实例
package com.cakin.view;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import com.cakin.util.*;
import com.sina.domain.Course;
import com.sina.domain.Studcourse;
import com.sina.domain.Student;
public class TestMain2 {
//请显示所有选择了21号课程的学生信息
String hql="select student.sname,student.sdept from Studcourse where course.cid=?";
String parameters[]={"21"};
List<Object[]> list=HibernateUtil.executeQuery(hql, parameters);
for(Object[] s:list){
System.out.println(s[0].toString()+" "+s[1].toString());
}
System.out.println("******************");
String hql1="from Studcourse where course.cid=21";
List<Studcourse> list1=HibernateUtil.executeQuery(hql1, null);
//需要配置懒加载,下面语句才能成功
// <class name="com.sina.domain.Student" table="student" catalog="selectcourse" lazy="false">
for(Studcourse sc:list1){
System.out.println(sc.getGrade()+sc.getStudent().getSname());
}
}
}
三 测试结果
林青霞 计算机系
成龙 化学系
******************
19林青霞
45成龙
四 Hibernate对象的三种关系
one–to–one:身份证<--->人
one–to–many:部门 <---> 员工
many-to-one:员工<--->部门
many-to-many:学生<--->课程
我们的Student【学生表】和 Course【课程表】就是多对多,多对多一般都会通过一个中间表转成one-to-many和 many-to-one
我们这里用了一个中间表StudCourse【学生-课程表】把关系简化成one-to-many和many-to-one。