6.4.5 左外连接
如果只用单表查询,只能从student表中查询出李晓梅的个人信息,而无法知道她的选课信息,因为选课信息存储在中间表sc中。HQL语句from Student s left join s.course c where s.sname='李晓梅'检索出了李晓梅的选课信息。
在HQL中使用left outer join关键字进行左外连接,outer关键字可以省略。
s.course是Student对象中的一个属性,用来存储Student对象的选课信息。在执行查询时,将根据Student.hbm.xml中的配置生成SQL语句,并检索信息。
查询的结果返回一个Object[]数组,数组的第0个元素是Student对象,第1个元素是与Object[0]中对应的学生所选课的Course对象。
左外连接(Left Outer Join)查询出左表对应的复合条件的所有记录,如查询李晓梅同学的选课信息。下面是类HQLLeftOuterJoinQuery的源代码。
其实关联查询 就是把 两个类的东西放到一个对象Object里 在去解析这个对象
package hibernate.ch06; import hibernate.HibernateSessionFactory; import java.util.Iterator; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; public class HQLLeftOuterJoinQuery { public static void main(String[] args) { Session session=HibernateSessionFactory.currentSession(); //HQL查询语句 String hql="from Student s left join s.course c where s.sname='李晓梅'"; Query query=session.createQuery(hql); //创建查询 List list=query.list(); //执行查询 Iterator it=list.iterator(); while(it.hasNext()){ Object[] obj=(Object[])it.next(); Student stu=(Student)obj[0]; Course course=(Course)obj[1]; System.out.println("*********学生信息及其选课信息******************"); if(course!=null){ System.out.println(stu.getSno()+"/t"+stu.getSname()+"/t"+ "课程:"+course.getCname()); }else{ System.out.println(stu.getSno()+"/t"+stu.getSname()+"/t"); }; } } }
如果只用单表查询,只能从student表中查询出李晓梅的个人信息,而无法知道她的选课信息,因为选课信息存储在中间表sc中。HQL语句from Student s left join s.course c where s.sname='李晓梅'检索出了李晓梅的选课信息。
在HQL中使用left outer join关键字进行左外连接,outer关键字可以省略。
s.course是Student对象中的一个属性,用来存储Student对象的选课信息。在执行查询时,将根据Student.hbm.xml中的配置生成SQL语句,并检索信息。
查询的结果返回一个Object[]数组,数组的第0个元素是Student对象,第1个元素是与Object[0]中对应的学生所选课的Course对象。
版权声明:本文为博主原创文章,未经博主允许不得转载。
today lazy . tomorrow die .