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连接池也有支持! 只维护一个连 ...
随机推荐
- 【POJ1011】Sticks
[题目概括] 现在有\(n\)个长度不超过\(50\)的木棍,请你把这些小木棍拼成若干根长度相同的木棍. 请你最小化拼成后的长度. [思路要点] 考虑枚举最后的长度,然后判断是否可以,这样就不需要最优 ...
- wx.setStorage、wx.getStorage和wx.getStorageSync
Page({ data: { testnum:""//设置测试参数 }, test:function(){ var Num = this.data.testnum; wx.setS ...
- Mysql cluster管理节点配置文件详解
一.定义MySQL Cluster的TCP/IP连接TCP/IP是MySQL集群用于建立连接的默认传输协议,正常情况下不需要定义连接.可使用“[TCP DEFAULT]”或“[TCP]”进行定义. 1 ...
- sqli-labs(5)
双查询注入 0x01爱之初了解 在第一次接触到双查询注入时 肯定会有很多问题 在这里我们先了解一下什么叫做 双查询注入 他的语法结构 以及为什么这样构造 答:在此之前,我们理解一下子查询,查询的关键字 ...
- 套接字之sendto系统调用
sendto系统调用用于向指定的目的地址发送数据,其系统调用的流程比较容易理解,如下面所示,其主要完成 (1)将用户数据组织成msghdr,(2)而后调用socket操作的sendmsg:ipv4对应 ...
- 关于Layui的表格中分页处理
table.render({ elem: '#test' ,height:'full-125' ,url:'data.php' ,cellMinWidth: 80 //全局定义常规单元格的最小宽度,l ...
- one vs all -- 将01分类器用于多类分类问题
大多数分类器都是01分类器,如logistic regression.当我们要将数据分为多类的时候, 可以用一种叫one-vs-all的方法将01分类器用于多类分类(mult-class classi ...
- foundation DB问题
1. go get github.com/apple/foundationdb/bindings/go/src/fdb # github.com/apple/foundationdb/bindings ...
- python UI自动化之JS定位
1.话不多说,直接贴入代码 上面的 document.getElementById 可以替换成别的定位方式,比如: 通过name获取:document.getElementsByName 通过标签获取 ...
- freetype HarfBuzz fontconfig Cairo 编译顺序
There is also a circular dependency between freetype and HarfBuzz. Note that fontconfig and Cario ar ...