Hql语句之关联和连接,显示连接与隐式连接



Hql语句之关联和连接。Hibernate使用关联映射来处理底层数据表之间的连接,程序通过Hibernate进行持久化访问时,就可利用Hibernate的关联来进行连接。

     HQL支持两种关联连接(join)的形式:隐式(implicit)与显示(explicit)。

隐式连接形式不适用join关键字,使用英文点号(.)来隐式连接来关联实体,而Hibernate底层将自动进行关联查询。如下HQL语句:

from Person p where p.myEvent.title > :title

以上的p.myEvent属性的其实就是一个持久化实体,Hibernate底层隐式地自动进行连接查询。

显示连接则需要使用xxx join关键字,例如如下语句:

//使用显示连接

from Person p

inner join p.myEvent event

where event.happenDate < :endDate

使用显示连接时,可以为相关联的实体,甚至是关联集合中的全部元素指定一个别名。

Hibernate支持的HQL连接类型,可使用如下几种连接方式:


inner join(内连接),可简写成join。

left outer join(左外连接),可简写成left join。

right outer join(右外连接),可简写成right join。

full join(全连接),并不常用。

使用显示连接时,还可通过HQL的with关键字来提供额外的连接条件,例如如下HQL语句:

from Person p

inner join p.myEvent event

with p.id > event.id

where event.happenDate < :endDate

      HQL语句里面的with关键字的作用基本等同于SQL99中on关键字的作用:都是用于指定连接条件。通过在HQL语句中使用with关键字,可以让HQL语句执行非等值连接查询。

 表连接的方式是基于底层SQL来实现的,假如底层不支持这些外连接,那么执行相应的HQL时就会相应地引发异常。