hibernate-HQL链接查询 转载sincoolvip

和SQL查询同样,HQL也支持各类各样的链接查询,如内链接、外链接链接类型                 HQL语法内链接                   inner join 或者join迫切内链接                inner join fetch 或join fetch左外链接                 left outer join 或者 left join迫切左外链接              left outer join fetch 或者 left join fetch右外链接                 right outer join 或者 right join           package Test;

import static org.junit.Assert.*;

import java.util.List;

import org.hibernate.Session;
import org.junit.Test;

import entity.Dept;
import entity.Emp;

import util.HibernateSessionFactory;

public class HqlTest {

    /**
     * 使用内链接查询部门和员工的信息。inner join,查出的是2个实体对象的列表,因此是object[]对象数组
     */
    @Test
    public void test1() {
        Session session=HibernateSessionFactory.getSession();
        try {
            List<Object[]> list = session.createQuery("from Dept d join d.emps").list();
            for (Object[] objects : list) {
                Dept dept=(Dept) objects[0];
                Emp emp = (Emp) objects[1];
                System.out.println(emp.getEname()+"\t"+dept.getDname());
                System.out.println("查询成功!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("查询失败!");
        }finally{
            session.close();
        }
    }

    /*使用隐式内链接按部门条件查询员工信息,查询的是Emp对象,因此返回是Emp类型的集合*/
    @Test
    public void test2() {
        Session session=HibernateSessionFactory.getSession();
        try {
            List<Emp> list = session.createQuery("from Emp e where e.dept.dname='SALES'").list();
            for (Emp emp : list) {
                System.out.println(emp.getEname()+"\t"+emp.getDept().getDname());
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("查询成功!");
        }finally{
            session.close();
        }
    }

    /**
     * select子句中使用隐式内链接按部门条件查询员工信息。
     */
    @Test
    public void test3() {
        Session session=HibernateSessionFactory.getSession();
        try {
        List<Object[]> list = session.createQuery("select e.dept.dname,e.ename from Emp e where e.dept.dname='SALES'").list();
        for (Object[] objects : list) {
            
            System.out.println(objects[0]+"~~~~"+objects[1]);
        }
        System.out.println("查询成功!");
        } catch (Exception e) {
            e.printStackTrace();    
        }finally{
            session.close();
        }
    }
    
    /**
     * 使用迫切内链接查询部门和员工的信息。
     */
    @Test
    public void test4() {
        Session session=HibernateSessionFactory.getSession();
        try {
        List<Dept> list = session.createQuery("select distinct d from Dept d inner join fetch d.emps").list();
        for (Dept dept : list) {
            System.out.println(dept.getDname()+"\t"+dept.getEmps());
        }
        
        System.out.println("查询成功!");
        } catch (Exception e) {
            e.printStackTrace();    
        }finally{
            session.close();
        }
    }
    /**
     * 使用迫切左外链接查询部门和员工的信息。
     */
    @Test
    public void test5() {
        Session session=HibernateSessionFactory.getSession();
        try {
        List<Dept> list = session.createQuery("select distinct d from Dept d left join fetch d.emps").list();
        for (Dept dept : list) {
            System.out.println(dept.getDname()+"\t"+dept.getEmps());
        }
        
        System.out.println("查询成功!");
        } catch (Exception e) {
            e.printStackTrace();    
        }finally{
            session.close();
        }
    }
    
    /**
     * 使用交叉链接查询部门和员工的信息。
     */
    @Test
    public void test6() {
        Session session=HibernateSessionFactory.getSession();
        try {
        List<Object[]> list = session.createQuery("from Dept d,Emp e where d.deptno=e.dept.deptno").list();
        for (Object[] objects : list) {
            Dept dept=(Dept) objects[0];
            Emp emp=(Emp) objects[1];
            System.out.println(emp.getEname()+"\t"+dept.getDname());
        }
        
        System.out.println("查询成功!");
        } catch (Exception e) {
            e.printStackTrace();    
        }finally{
            session.close();
        }
    }
}
相关文章
相关标签/搜索