|
内连接:把两面共有的部分查出来 左连接:把左边的部分全查出来 右连接:把右边的部分全查出来
/** * inner join */ public void testquery1(){ Session session = null; try{ session = HibernateUtils2.singleInstance.getSession(); session.beginTransaction(); //可以省略inner,因为只要写了join,默认就是inner内连接 //List lists = (List)session.createQuery("select c.name, s.name from Student s join s.classes c").list(); //写上的话,就是这个样子啦 List lists = (List)session.createQuery("select c.name, s.name from Student s inner join s.classes c").list(); for (Iterator iter = lists.iterator();iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + "," + obj[1]); } }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils2.singleInstance.closeSession(session); } }
/** * left join */ public void testquery2(){ Session session = null; try{ session = HibernateUtils2.singleInstance.getSession(); session.beginTransaction(); //把没有班级的学生也查出来,注意left join 后接的表有点特殊,是c.student即班级中的student属性,hibernate会依照这个属性帮我们找到相应的表 List lists = (List)session.createQuery("select c.name, s.name from Student s left join c.student s").list(); for (Iterator iter = lists.iterator();iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + "," + obj[1]); } }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils2.singleInstance.closeSession(session); } }
/** * right join */ public void testquery2(){ Session session = null; try{ session = HibernateUtils2.singleInstance.getSession(); session.beginTransaction(); //把没有学生的班级也查出来,注意right join 后接的也比较特殊,理由同上 List lists = (List)session.createQuery("select c.name, s.name from Student s right join c.student s").list(); for (Iterator iter = lists.iterator();iter.hasNext();) { Object[] obj = (Object[])iter.next(); System.out.println(obj[0] + "," + obj[1]); } }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils2.singleInstance.closeSession(session); } } |