Hibernate HQL多表查询
1、内连接和迫切内连接
(1)内连接
HQL语句:from 实体类名 实体类别名 inner join 实体类别名.表示另一个表数据的集合名称
(2)迫切内连接
HQL语句:from 实体类名 实体类别名 inner join fetch 实体类别名.表示另一个表数据的集合名称
(3)区别:内连接返回的数据以数组的方式封装,迫切内连接返回的数据以对象的方式封装。
(4)代码:
内连接代码:
// 使用HQL内连接查询
@Test
public void test1() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1、创建Query对象,写hql语句
Query query = session.createQuery("from Sort s inner join s.setGoods"); //调用list方法得到数据
List<Object> objects =query.list();
//遍历list得到数组
for (Object object : objects) {
Object[] objects2 = (Object[]) object;
System.out.println(Arrays.toString(objects2)); }
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
迫切内连接代码:
// 使用HQL迫切内连接查询
@Test
public void test2() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建Query对象,写hql语句
Query query = session
.createQuery("from Sort s inner join fetch s.setGoods"); // 调用list方法得到数据
List<Object> objects = query.list();
// 遍历list得到数组
for (Object object : objects) {
System.out.println(object);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
2、左外连接和迫切左外连接
(1)左外连接
HQL语句:from 实体类名 实体类别名 left outer join 实体类别名.表示另一个表数据的集合名称
(2)迫切左外连接
HQL语句:from 实体类名 实体类别名 left outer join fetch 实体类别名.表示另一个表数据的集合名称
(3)区别:左外连接返回的数据以数组的方式封装,迫切左外连接返回的数据以对象的方式封装。
(4)代码:
左外连接代码:
// 使用HQL左外连接查询
@Test
public void test3() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建Query对象,写hql语句
Query query = session
.createQuery("from Sort s left outer join s.setGoods"); // 调用list方法得到数据
List<Object> objects = query.list();
// 遍历list得到数组
//调用list方法得到数据
//遍历list得到数组
for (Object object : objects) {
Object[] objects2 = (Object[]) object;
System.out.println(Arrays.toString(objects2));
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
迫切左外连接代码:
// 使用HQL迫切左外连接查询
@Test
public void test4() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建Query对象,写hql语句
Query query = session
.createQuery("from Sort s left outer join fetch s.setGoods"); // 调用list方法得到数据
List<Object> objects = query.list(); for (Object object : objects) { System.out.println(object);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
3、右外连接
HQL语句:from 实体类名 实体类别名 right outer join 实体类别名.表示另一个表数据的集合名称
代码:
// 使用HQL右外连接查询
@Test
public void test5() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、创建Query对象,写hql语句
Query query = session
.createQuery("from Sort s right outer join s.setGoods"); // 调用list方法得到数据
List<Object> objects = query.list(); for (Object object : objects) {
Object[] objects2 = (Object[]) object;
System.out.println(Arrays.toString(objects2));
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
Hibernate HQL多表查询的更多相关文章
- Hibernate hql 多表查询
String hql="select c from Col c ,UserRole role where c.id=role.columnId and c.id=? and role.use ...
- Hibernate学习---单表查询
我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以 ...
- HQL多表查询
------------------siwuxie095 HQL 多表查询 以客户和联系人为例(一对多) 1.内连接 (1)hql 语句写法 from Customer c inner join c. ...
- Hibernate的HQL多表查询
HQL的内连接查询 对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回 代码片段: @Test // 内连接 public ...
- Spring Hibernate JPA 联表查询 复杂查询(转)
今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...
- Spring Hibernate JPA 联表查询 复杂查询
今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...
- 【Hibernate】Hibernate的多表查询
在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的 ...
- hql 多表查询
sql 单表/多表查询去除重复记录单表distinct多表group by select h from Hytxbz as h,Tgbzk as t where h.hytxbzid=t.hytxbz ...
- Hibernate的多表查询,分装到一个新的实体类中的一个方法
不知道是否还有其他方法实现,请高人指点. 如果涉及到多张表多字段查询,并且想利用查询出来的字段在界面层构建一个新的实体类,可以使用这种方法: 如果查询出来的多字段中,有多个字段的名字都相同(如想查询出 ...
随机推荐
- python之文件操作总结
目录 文件:数据的抽象和集合 文件的打开关闭 文件内容的读取 文件的全文本操作 文件的逐行操作 数据文件的写入 使用json模块 文件:数据的抽象和集合 文件是存储在辅助存储器上的数据序列 文件是数据 ...
- [LeetCode 题解]: Insertion Sort List
Sort a linked list using insertion sort. 题目要求:链表的插入排序,由于没有时间复杂度的要求,可以直接循环操作. /** * Definition for si ...
- [LeetCode 题解]: Permutations
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- 《html5 从入门到精通》读书笔记(一)
今天看了<html5 从入门到精通>这本书,感觉阅读下来很舒心,不像阅读其他书籍很揪心.html增加的知识点,我觉得非常有价值,看完几章记录了一些内容,不但能巩固,也为下次遗忘知识点做好准 ...
- C#+MVC+EF+LayUI框架的应用(附带源码和教程)
内容: 1.该框架主要用到的技术有MVC,EF,Layer,以及Razor语法和数据库有关的操作. 2.框架二次开发(增加,删除,修改,建库,以及维护查询等) 3.框架公用库更新要求与规范 4.本框架 ...
- OLEDB方式操作oracle数据库
OLEDB方式操作oracle数据库 一.查询语句: using (OleDbConnection conn = new OleDbConnection(System.Configuration.Co ...
- [HNOI2010] 合唱队
题目链接:https://www.luogu.org/problemnew/show/P3205 一个区间DP的题目. 设计状态为:\(dp1[i][j]\)表示当前区间为\([i,j]\),而且最后 ...
- React.Component 与 React.PureComponent(React之性能优化)
前言 先说说 shouldComponentUpdate 提起React.PureComponent,我们还要从一个生命周期函数 shouldComponentUpdate 说起,从函数名字我们就能看 ...
- “全栈2019”Java第十六章:下划线在数字中的意义
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Shell中反引号和$()的区别
Shell中可以用来实现变量代换的命令有两种,一种是由反引号括起来的一条命令另一种是由$()括起来一条命令,shell先执行这条命令,然后见输出结果立刻代换到当前命令行中. 例如定义一个变量存放dat ...