france

https://github.com/francecil

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
6.4.5  左外连接 

左外连接(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对象。 


版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2014-11-15 20:50  france  阅读(1634)  评论(0编辑  收藏  举报