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. .net 线程基础 ThreadPool 线程池

    1. ThreadPool 线程池异步: //public static bool QueueUserWorkItem(WaitCallback callBack); //public static ...

  2. C#基础入门 四

    C#基础入门 四 方法参数 值参数:不附加任何修饰符: 输出参数:以out修饰符声明,可以返回一个或多个给调用者: 如果想要一个方法返回多个值,可以用输出参数来处理,输出参数由out关键字标识,如st ...

  3. mybatis--mapper配置总结

    mapper介绍 mapper使用规则:按业务划分,一个业务模块相关的sql均定义在一个mapper文件 mapper的xml格式: doctype: <!DOCTYPE mapper PUBL ...

  4. MacOS安装使用Node.js

    1. 到官网https://nodejs.org/zh-cn/download/下载,选择Macintosh Installer, 如下: 2. 按预设的下一步,Node.js版本为v6.10.0, ...

  5. 给刚玩Hadoop的朋友一些建议

    随着两会中间央视新闻天天说大数据,很多人纷纷开始关注大数据和Hadoop以及数据挖掘和数据可视化了,我现在创业,遇到很多传统数据行业往Hadoop上面去转型的公司和个人,提了很多问题,大多数问题还都是 ...

  6. .Net Core 自动化部署:使用jenkins部署到linux docker容器运行

    上次我们说到.Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用,这次我们使用jenkins发布我们的.NET Core站点到docker容器中运行,为后面的的 ...

  7. SCVMM 安装

    1.所有的物理机必须在域环境下 2.安装VMM和SQL使用的域账号尽量相同,并且唯一,尽量与管理hyper v主机使用的账号不相同

  8. javascript实现playfair和hill密码算法

    时至期末,补习信息安全概论作业.恰巧遇古典密码学算法中的playfair算法和hill算法,用javascript语言实现起来是在有趣,边查百度边编码,顺便好好补习一下javascript基础. pl ...

  9. 一个简单的HTML病毒分析

    一直就想写这篇东西了,仅仅是上班时说要上班,不写.回家后又忙着玩游戏,丢一边去了.如今仅仅好不务正业的开写了.希望头儿不会知道我的blog.哈哈 在非常久之前就对HTML的病毒非常感兴趣了,非常好奇怎 ...

  10. dict字典;dict的操作

    一.字典: 1. 字典 dict 用{}来表示 键值对数据 {key:value} 唯一性 键   都必须是可哈希的 不可变的数据类型就可以当做字典中的键 值   没有任何限制 1.1  字典的创建: ...