HQL 查询

来源:互联网 发布:mac怎么退出qq 编辑:程序博客网 时间:2024/06/08 15:44

最近项目中使用到Hql查询,单实体查询自然是easy的,当涉及到一些相对多的关联时,查询的方式一时想不清楚使用那种方式了,是用子查询还是关联呢,他们区别么,下面咱们就来看看。

1 Hql 简单查询

  整个实体

  多属性 (对象数组,对象数组长度,属性个数)

  多属性,类(运用构造函数,有参数)


我们先来看两个实体的关系图,一对多关系

 

 1.1 整个实体查询

:查询考试或简单的查询考试考场安排

Hql:FROM Examination  a WHERE  a.id=:id

1.2多属性(数组集合)

Hql:  (select e.id,e.examinationName from  Examination ).list();

1.3多属性(对象集合)

使用类构造函数,前提是该类必须是有参数的构造函数

Hql:  (select  new Examination (id,examinationName ) from Examination ).list();
以上是简单的单实体操作,接下来说的是多实体连接查询


2 连接查询

 

2.1隐士关联

HibernateJpa不显示指定连接条件,而是指定被映射java类关联的名称,通过一个外键约束名称表达连接条件,而且隐士连结采用多对一或一对一关联,是不通过集合的关联的。

如:查询在考试安排实体中查询考试名称是某个考试的安排信息。

 Hql:  FROM ExaminationRoomArrangement g WHEREg.examination.examinationName=:examinationName

以上查询没有连结任何实体,而是将考试实体的属性与考场安排全部映射到响应的实体中。返回的是一个List的包含所有属性的集合

若要指定的属性,则需要添加行select属性如:

Select  g.examinationRoomState from ExaminationRoomArrangement g where g.examination.examinationName=:examinationName 

返回的则一个包含了ExaminationRoomArrangement所有属性的数组集合。

2.2From子句连接

 有内联或外联


内联: from ExaminationRoomArrangement g join g.examination e where  e.examinationName=: examinationName

该语句并没有返回一个ListExaminationRoomArrangement ,而是数组集合,object[] 索引0 examination 1ExaminationRoomArrangement

2.3Where关联

 这个关联主要还是用于两个实体之间没有实际的主外键关联,通过where子句的一个条件来进行组合

如:用户User LogRcord 实体类,没有主外键关联但是要查询记录

Hql:from User user,LogRcord log where user.username=log.username

该语句返回的是两个实体的所有属性,当然也可使用select投影选择关注的属性


小结:

通过以上分析,对Hql的查询有了基本的认识,综合起来还是对Sql的精简封装,对于连接的这三种方式说起来还是与Sql的内外全连接想通,只是在一些语法上有细微的差别。


1 0
原创粉丝点击