Hibernate 学习笔记 之 HQL 内连接和迫切内连接

本文详细介绍了HQL中的内连接、迫切内连接、左外连接、迫切左外连接及右外连接的用法,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本demo采用5.x以前的query

一、HQL 内连接

  以数组的方式进行存储

 /***
     * HQL 内连接
     *
     * 内连接查询hql语句写法:以客户和联系人为例
     *
     * from Customer c inner join c.setLinkMan
     */
    @Test
    public void testJoin() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();


            //1.创建query对象
            Query query = session.createQuery("from Customer c inner join c.setLinkMan");

            List<Customer> list = query.list();



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

二、迫切内连接

  以对象的方式进行存储

/**
     * 迫切内连接
     *
     * 区别:使用内连接返回list中每部分是数组,
     *      迫切内连接返回list每部分是对象
     *
     * from Customer c inner join fetch c.setLinkMan
     */

    @Test
    public void testJoin2() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();


            //1.创建query对象
            Query query = session.createQuery("from Customer c inner join fetch c.setLinkMan");

            List<Customer> list = query.list();



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

三、左外连接

/**
     * 左外连接
     *
     * from Customer c left outer join c.setLinkMan
     *
     * 返回每部分是数组
     */

    @Test
    public void testJoin3() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();


            //1.创建query对象
            Query query = session.createQuery("from Customer c left outer join c.setLinkMan");

            List<Customer> list = query.list();



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

四、迫切左外连接

/**
     * 迫切左外连接
     * from Customer c left outer join fetch c.setLinkMan
     *
     * 返回的每部分是对象
     */
    @Test
    public void testJoin4() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();


            //1.创建query对象
            Query query = session.createQuery("from Customer c left outer join fetch c.setLinkMan");

            List<Customer> list = query.list();



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

五、右外连接

/**
     * 右外连接
     * from Customer c right outer join fetch c.setLinkMan
     */
    @Test
    public void testJoin5() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction tx = null;
        try{
            sessionFactory = HibernateUtils.getSessionFactory();
            session = sessionFactory.openSession();
            tx = session.beginTransaction();


            //1.创建query对象
            Query query = session.createQuery("from Customer c right outer join fetch c.setLinkMan");

            List<Customer> list = query.list();



            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值