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的多表查询,分装到一个新的实体类中的一个方法
不知道是否还有其他方法实现,请高人指点. 如果涉及到多张表多字段查询,并且想利用查询出来的字段在界面层构建一个新的实体类,可以使用这种方法: 如果查询出来的多字段中,有多个字段的名字都相同(如想查询出 ...
随机推荐
- redis内部数据结构
redis内部数据结构,是指redis在自身的构建中,基于这些特定的内部数据结构进行的. 简单动态字符串:Simple Dynamic String 双端链表 字典:Dictonary 跳跃表:ski ...
- 【转】Android - 线程同步
什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题. 实现同步机制有两个方法: 1.同步代码块 ...
- SlidesJS基本使用方法和官方文档解释
Slides – 是一个简单的,容易定制和风格化,的jQuery幻灯片插件. Slides提供褪色或幻灯片过渡效果,图像淡入淡出,图像预压,自动生成分页,循环,自动播放的自定义等很多选项. 用Slid ...
- OO 普通类与静态类的区别
普通类与静态类的区别 普通类与静态类的区别 一.普通类: 1.可以实例化,即可以new; 2.可以继承: 二.静态类:(静态类本质就是 abstract+sealed类) 1.不能被实例化:(抽象的) ...
- coderfoces D. Gourmet choice
D. Gourmet choice time limit per test 2 seconds memory limit per test 256 megabytes 题目链接: https: ...
- 如何在VMware Workstation11的Windows Server 2008 R2中安装XAMPP?
我在VMware Workstation11的Windows Server 2008 R2打算安装XAMPP,但是总是有问题,经过两天的不懈努力,终于实现了,下面我具体说一说我遇到的问题和解决方法! ...
- 包(package)
一个文件夹管理多个模块文件,这个文件夹就被称为包,如下: 既然是多个模块文件,那么涉及多个模块怎么导入呢? ***当前路径下包之间模块导入: import wsg ***不同路径下包之间模块导入: f ...
- XPath语法使用的一些心得
XPath语法还是很强大的,支持一些函数和操作符,方便操作,但是因为版本的原因可能有的函数只能在XPath2(2007)里使用,而不能在XPath1(1999)中使用,比如函数 ends-with(s ...
- FPGA基础学习(8) --内部结构之存储单元
目录 1. 基本结构 2. BRAM与DRAM的比较 3. BRAM的特点 4. Block Memory的使用 4.1 配置为RAM或ROM 4.2. 配置为FIFO 参考文献: 上一篇中提到了SL ...
- 04. prosition 的值都有哪些,其最本质的区别在哪里?
4.prosition 的值都有哪些,其最本质的区别在哪里? position:relative 相对定位 position:fixed 相对浏览器定位 position:absolute 绝对定位 ...