HQL中的内连接、左连接、右连接

内连接:把两面共有的部分查出来
左连接:把左边的部分全查出来
右连接:把右边的部分全查出来

/**
* 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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值