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();
}
}
}
hibernate-HQL连接查询 转载sincoolvip的更多相关文章
- 【学习笔记】Hibernate HQL连接查询和数据批处理 (Y2-1-7)
HQL连接查询 和SQL查询一样 hql也支持各种链接查询 如内连接 外连接 具体如下 左外连接 left (outer) join 迫切左外连接 left (outer) join fetch 右外 ...
- Hibernate批量处理数据、HQL连接查询
一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 ...
- Hibernate批量处理数据、[HQL连接查询]
一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 (2)使 ...
- HQL连接查询和注解
HQL连接查询和注解 一:HQL连接查询 各种连接查询: 内连接:inner join或join From Entity inner [inner] join [fetch] Entity.prope ...
- HQL连接查询
HQL提供了连接查询机制如内连接,外连接,,还允许显示指定迫切内连接,和迫切外联结. 连接类型 内连接 inner join 或join 迫切内链接 inner join fetch 左外联结 le ...
- 11.hibernate的连接查询
1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...
- hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
1 当使用left join左连连接,sql语句为 select t from SecondPage t left join t.rightNavbar n where 1=1 页面中出现了部分空行的 ...
- hibernate 实现多表连接查询(转载)
http://www.cnblogs.com/lihuiyy/archive/2013/03/28/2987531.html 为了方便,直接粘过来,方便查看.不收藏了 Hibernate主要支持两种查 ...
- hibernate对连接池的支持和HQL查询
hibernate对连接池的支持 连接池, 作用: 管理连接:提升连接的利用效率! 常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 只维护一个连 ...
随机推荐
- codevs2370 小机房的树 x
2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号 ...
- ES6非常棒的特性-解构
https://blog.csdn.net/maoxunxing/article/details/79772946
- VMware与Centos系统
今日任务 1.Linux发行版的选择 2.vmware创建一个虚拟机(centos) 3.安装配置centos7 4.xshell配置连接虚拟机(centos) 选择性 pc可以选择 -纯系统 Lin ...
- servlet3.0无web.xml
大家应该都已经知道spring 3.1对无web.xml式基于代码配置的servlet3.0应用.通过spring的api或是网络上高手们的博文,也一定很快就学会并且加到自己的应用中去了.PS:如果还 ...
- 第十一周Java学习总结。
java UI 图形界面知识梳理: ATM: 在整个AWT包中提供的所有工具类主要分为以下3种. (1)组件:Component. (2)容器:Container. (3)布局管理器:LayoutMa ...
- 黑马lavarel教程---4、csrf验证及相关
黑马lavarel教程---4.csrf验证及相关 一.总结 一句话总结: csrf验证就像短信验证码那样验证用户身份,这个验证是为了验证是本站的操作,用的是一个token字符串,外站如果有了这个to ...
- java.sql.SQLSyntaxErrorException: ORA-01795: 列表中的最大表达式数为 1000
后台报了一些异常日志,查阅后发现在 oracle 数据库中使用 in 关键字条件不能超过 1000 个,当时写查询语句时没有关注这个问题 总结一下解决方法 1.分多次查询,对查询要求不高的话.把入参的 ...
- Dubbo HelloWord 与 Spring Boot 整合
实现消费者项目代码调用提供者项目代码,使用 zookeeper 做为注册中心 interface 项目 pom.xml <?xml version="1.0" encodin ...
- 一、基础篇--1.1Java基础-什么是java的序列化和反序列化
什么是序列化和反序列化 序列化:把堆内存中的java对象数据,通过某种方式把对象存储到磁盘文件或者传递给其他网络节点.这个过程称为序列化.简单来说呢,就是将对象转换成二进流的过程. 反序列化:把磁盘 ...
- [NLP] 语义网络与知识图谱入门(二)
语义网络与知识图谱入门(二) OWL 本体声明 owl用owl:Ontology来声明一个本体.rdf:about属性为本体提供一个名称或引用.根据标准,当rdf:about属性的值为"&q ...