和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();
}
}
}

hibernate-HQL连接查询 转载sincoolvip的更多相关文章

  1. 【学习笔记】Hibernate HQL连接查询和数据批处理 (Y2-1-7)

    HQL连接查询 和SQL查询一样 hql也支持各种链接查询 如内连接 外连接 具体如下 左外连接 left (outer) join 迫切左外连接 left (outer) join fetch 右外 ...

  2. Hibernate批量处理数据、HQL连接查询

    一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作     数据库层面 ...

  3. Hibernate批量处理数据、[HQL连接查询]

    一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 (2)使 ...

  4. HQL连接查询和注解

    HQL连接查询和注解 一:HQL连接查询 各种连接查询: 内连接:inner join或join From Entity inner [inner] join [fetch] Entity.prope ...

  5. HQL连接查询

    HQL提供了连接查询机制如内连接,外连接,,还允许显示指定迫切内连接,和迫切外联结. 连接类型 内连接 inner join 或join 迫切内链接 inner join fetch 左外联结  le ...

  6. 11.hibernate的连接查询

    1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...

  7. hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法

    1 当使用left join左连连接,sql语句为 select t from SecondPage t left join t.rightNavbar n where 1=1 页面中出现了部分空行的 ...

  8. hibernate 实现多表连接查询(转载)

    http://www.cnblogs.com/lihuiyy/archive/2013/03/28/2987531.html 为了方便,直接粘过来,方便查看.不收藏了 Hibernate主要支持两种查 ...

  9. hibernate对连接池的支持和HQL查询

    hibernate对连接池的支持 连接池, 作用: 管理连接:提升连接的利用效率! 常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 只维护一个连 ...

随机推荐

  1. unittest详解(三) 测试套件(TestSuite)

    在前面一章中示例了如何编写一个简单的测试,但有两个问题: 我们知道测试用例的执行顺序是根据测试用例名称顺序执行的,在不改变用例名称的情况下,我们怎么来控制用例执行的顺序呢? 一个测试文件,我们直接执行 ...

  2. AtCoder AGC017C Snuke and Spells

    题目链接 https://atcoder.jp/contests/agc017/tasks/agc017_c 题解 很久前不会做看了题解,现在又看了一下,只想说,这种智商题真的杀我... 转化成如果现 ...

  3. Android学习_7/22

    一.Android项目目录结构 1.         AndroidManifest.xml:整个Android项目的配置,注册各组件 <activity android:name=" ...

  4. apache的httpclient进行http的交互处理

    使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclient源码 ...

  5. MongoDB与mysql的对比

    1.与Mql对照 MySQL MongoDB 说明 mysqld mongod 服务器守护进程 mysql mongo 客户端工具 mysqldump mongodump 逻辑备份工具 mysql m ...

  6. 后盾网lavarel视频项目---4、lavarel和vue都是{{}}表示变量,如何解决冲突

    后盾网lavarel视频项目---4.lavarel和vue都是{{}}表示变量,如何解决冲突 一.总结 一句话总结: @{{videos}}:@符号表示lavarel不处理:textarea nam ...

  7. docker容器无法删除——状态Dead

    问题:由于容器挂载数据卷,无法直接删除. 解决: 先查出ID 进行杀掉,然后再删除. . 搞定

  8. PHP 封装类来访问数据库

    封装访问数据库的类 <?php class DBDA { public $host = "localhost"; //数据库地址 public $uid = "ro ...

  9. windows运维常用命令

    devmgmt.msc  设备管理器msconfig     启动项命令mstsc        远程登录diskmgmt.msc 磁盘管理  calc.exe     计算器shutdown -r ...

  10. SQL Server高可用实现方案

    名词解释: WSFC:Windows Server Failover Cluster,在Windows Server操作系统上,由WSFC提供高可用性.故障检测和SQL Server AlwaysOn ...