hibernate-HQL连接查询
和SQL查询一样,HQL也支持各种各样的连接查询, 如内连接、外连接。
实例:
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(); } } }
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
本文版权归作者和博客园共有,欢迎转载