Hibernate的HQL多表查询

时间:2022-09-17 14:55:58

HQL的内连接查询

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

代码片段:

Hibernate的HQL多表查询Hibernate的HQL多表查询
 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 }
View Code

debug截图:

Hibernate的HQL多表查询

 

 HQL迫切内连接查询

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

1 from Customer c inner join fetch c.mans

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

代码片段:

Hibernate的HQL多表查询Hibernate的HQL多表查询
 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 }
View Code

Debug截图:

 Hibernate的HQL多表查询

 

 HQL的左外连接

  左外连接的hql语句:

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

代码片段:

Hibernate的HQL多表查询Hibernate的HQL多表查询
 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 }
View Code

Debug截图:

Hibernate的HQL多表查询

 

 HQL的左外迫切连接

  迫切左外连接hql语句:

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

代码片段:

Hibernate的HQL多表查询Hibernate的HQL多表查询
 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 }
View Code

Debug截图:

Hibernate的HQL多表查询