Hibernate的HQL多表查询

HQL的内连接查询

  对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回

代码片段:

 1 @Test
 2     // 内连接
 3     public void fun1() {
 4         SessionFactory factory = null;
 5         Session session = null;
 6         Transaction tx = null;
 7         try {
 8             factory = Tools.getSessionFactory();
 9             session = factory.openSession();
10             tx = session.beginTransaction();
11             // mans是Customer实体类的关联LinkMan实体类的一个集合属性
12             Query query = session.createQuery("from Customer c inner join c.mans");
13             List list = query.list();
14             tx.commit();
15         } catch (Exception e) {
16             tx.rollback();
17             e.printStackTrace();
18         } finally {
19             session.close();
20         }
21     }

debug截图:

HQL迫切内连接查询

  hql的迫切内连接查询,只需要将内连接查询加上一个fetch就行,如下:

1 from Customer c inner join fetch c.mans

  迫切内连接和内连接的主要的区别是,内连接的List每部分是一个对象数组,而迫切内连接的List每部分返回的是一个对象。

代码片段:

 1 @Test
 2     // 迫切内连接
 3     public void fun2() {
 4         SessionFactory factory = null;
 5         Session session = null;
 6         Transaction tx = null;
 7         try {
 8             factory = Tools.getSessionFactory();
 9             session = factory.openSession();
10             tx = session.beginTransaction();
11             // mans是Customer实体类的关联LinkMan实体类的一个集合属性
12             Query query = session.createQuery("from Customer c inner join fetch c.mans");
13             List list = query.list();
14             tx.commit();
15         } catch (Exception e) {
16             tx.rollback();
17             e.printStackTrace();
18         } finally {
19             session.close();
20         }
21     }

Debug截图:

HQL的左外连接

  左外连接的hql语句:

1 from Customer c left outer join 关联另一个实体的属性

代码片段:

 1 @Test
 2     // 左外连接
 3     public void fun3() {
 4         SessionFactory factory = null;
 5         Session session = null;
 6         Transaction tx = null;
 7         try {
 8             factory = Tools.getSessionFactory();
 9             session = factory.openSession();
10             tx = session.beginTransaction();
11             Query query = session.createQuery("from Customer c left outer join c.mans");
12             List list = query.list();
13             tx.commit();
14         } catch (Exception e) {
15             tx.rollback();
16             e.printStackTrace();
17         } finally {
18             session.close();
19         }
20     }

Debug截图:

HQL的左外迫切连接

  迫切左外连接hql语句:

from Customer c left outer join fetch 关联的另一个实体类在此类中的属性

代码片段:

 1 @Test
 2     // 迫切左外连接
 3     public void fun4() {
 4         SessionFactory factory = null;
 5         Session session = null;
 6         Transaction tx = null;
 7         try {
 8             factory = Tools.getSessionFactory();
 9             session = factory.openSession();
10             tx = session.beginTransaction();
11             Query query = session.createQuery("from Customer c left outer join fetch c.mans");
12             List list = query.list();
13             tx.commit();
14         } catch (Exception e) {
15             tx.rollback();
16             e.printStackTrace();
17         } finally {
18             session.close();
19         }
20     }

Debug截图:

时间: 2024-10-17 05:12:20

Hibernate的HQL多表查询的相关文章

HQL多表查询

------------------siwuxie095 HQL 多表查询 以客户和联系人为例(一对多) 1.内连接 (1)hql 语句写法 from Customer c inner join c.linkManSet (2)具体实现 /* * (1) 创建 Query 对象 * * 调用 session 的 createQuery() 方法,参数是 hql * 语句,返回值是 Query 类型,创建以接收 */ Query query=session.createQuery("from Cu

Hibernate hql 多表查询

String hql="select c from Col c ,UserRole role where c.id=role.columnId and c.id=? and role.userId=?"; this.getHibernateTemplate().find(hql,new Object[]{colId,userId}).get(0); 上面返回的是一个对象实体,实体的类型是Col String hql="from Col c ,UserRole role whe

HQL多表查询 ---- Hibernate之查询语句

叙:上一章节轻风记录的是HQL的单表查询,本章节就HQL的多表查询方式进行记录: HQL查询数据 本章节主要学习的是HQL查询方式的表查询: 几种查询方式 1. 内连查询 查询语句比较奇怪,from Customer c inner join c.linkMens,查询Customer类所映射的表和Customer类中linkMens属性所代表的实体类的映射的数据库表:这句话很拗口,但是多读两遍理解理解就好了,重点理解的是linkMens是Customer类中的属性,linkMens是LinkM

hql 多表查询

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

Hibernate:基于HQL实现数据查询

HQL:  hibernate query language(hibernate特有的查询语言) hql是基于对象的查询语言,其语法与sql类似,但是他和sql的区别在于sql是面向表和字段的查询,而hql是面向对象和属性的查询. 需求1. 查询出所有的项目 @Test public void testFindAllPorject(){ //获取hibernate session Session session = HibernateUtils.getSession(); //定义hql语句 S

Java_Web三大框架之Hibernate+jsp+HQL分页查询

分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { private int id;//房屋id private HouseType type;//房屋类型 private Users2 user;//用户 private Street street;//街道 private String title;//标题 private String descr

hibernate学习---单表查询

我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以Hibernate也是能够实现SQL的一切数据库操作. 在SQL中,单表查询是最常用的语句,同理Hibernate最常用到的也是查询语句,所以今天就来讲讲Hibernate的单表查询: 今天要将的内容分以下几点: 查询所有 查询结果排序 为查询参数动态赋值 分页查询 模糊查询 唯一性查询 聚合函数查

hibernate多表查询封装实体

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下.最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别. hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系. 例如:student表和score表需要做联合查询. 1)sql: select s.id,s.name,sc.score from student as s,score as sc

Hibernate六 HQL查询

HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条件查询,甚至使用原生的SQL查询语句.Hibernate还提供了一种数据过滤功能,这些都用于删选目标数据.2.查询步骤:(1)获取Hibernate Session对象(2)编写HQL语句(3)以HQL语句为参数,调用Session的createQuery()方法创建查询对象(4)如果HQL语句包含