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多表查询的更多相关文章

  1. Hibernate hql 多表查询

    String hql="select c from Col c ,UserRole role where c.id=role.columnId and c.id=? and role.use ...

  2. Hibernate学习---单表查询

    我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以 ...

  3. HQL多表查询

    ------------------siwuxie095 HQL 多表查询 以客户和联系人为例(一对多) 1.内连接 (1)hql 语句写法 from Customer c inner join c. ...

  4. Hibernate的HQL多表查询

    HQL的内连接查询 对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回 代码片段: @Test // 内连接 public ...

  5. Spring Hibernate JPA 联表查询 复杂查询(转)

    今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...

  6. Spring Hibernate JPA 联表查询 复杂查询

    今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...

  7. 【Hibernate】Hibernate的多表查询

    在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的 ...

  8. hql 多表查询

    sql 单表/多表查询去除重复记录单表distinct多表group by select h from Hytxbz as h,Tgbzk as t where h.hytxbzid=t.hytxbz ...

  9. Hibernate的多表查询,分装到一个新的实体类中的一个方法

    不知道是否还有其他方法实现,请高人指点. 如果涉及到多张表多字段查询,并且想利用查询出来的字段在界面层构建一个新的实体类,可以使用这种方法: 如果查询出来的多字段中,有多个字段的名字都相同(如想查询出 ...

随机推荐

  1. redis内部数据结构

    redis内部数据结构,是指redis在自身的构建中,基于这些特定的内部数据结构进行的. 简单动态字符串:Simple Dynamic String 双端链表 字典:Dictonary 跳跃表:ski ...

  2. 【转】Android - 线程同步

    什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题. 实现同步机制有两个方法: 1.同步代码块 ...

  3. SlidesJS基本使用方法和官方文档解释

    Slides – 是一个简单的,容易定制和风格化,的jQuery幻灯片插件. Slides提供褪色或幻灯片过渡效果,图像淡入淡出,图像预压,自动生成分页,循环,自动播放的自定义等很多选项. 用Slid ...

  4. OO 普通类与静态类的区别

    普通类与静态类的区别 普通类与静态类的区别 一.普通类: 1.可以实例化,即可以new; 2.可以继承: 二.静态类:(静态类本质就是 abstract+sealed类) 1.不能被实例化:(抽象的) ...

  5. coderfoces D. Gourmet choice

      D. Gourmet choice time limit per test 2 seconds memory limit per test 256 megabytes   题目链接: https: ...

  6. 如何在VMware Workstation11的Windows Server 2008 R2中安装XAMPP?

    我在VMware Workstation11的Windows Server 2008 R2打算安装XAMPP,但是总是有问题,经过两天的不懈努力,终于实现了,下面我具体说一说我遇到的问题和解决方法! ...

  7. 包(package)

    一个文件夹管理多个模块文件,这个文件夹就被称为包,如下: 既然是多个模块文件,那么涉及多个模块怎么导入呢? ***当前路径下包之间模块导入: import wsg ***不同路径下包之间模块导入: f ...

  8. XPath语法使用的一些心得

    XPath语法还是很强大的,支持一些函数和操作符,方便操作,但是因为版本的原因可能有的函数只能在XPath2(2007)里使用,而不能在XPath1(1999)中使用,比如函数 ends-with(s ...

  9. FPGA基础学习(8) --内部结构之存储单元

    目录 1. 基本结构 2. BRAM与DRAM的比较 3. BRAM的特点 4. Block Memory的使用 4.1 配置为RAM或ROM 4.2. 配置为FIFO 参考文献: 上一篇中提到了SL ...

  10. 04. prosition 的值都有哪些,其最本质的区别在哪里?

    4.prosition 的值都有哪些,其最本质的区别在哪里? position:relative 相对定位 position:fixed 相对浏览器定位 position:absolute 绝对定位 ...