orderorderOrdermapget“o”“o”和”this”分别是orders集合和Customer对象的别名。在HQL查询中,还有一种查询成为隐式内连接,我们看下面的HQL语句,Fromorderowhereocustomer
amelike’zhao’这个语句通过ocustomer
ame访问与Order对象关联的Customer对象的
ame属性,尽管没有使用joi
关键字,其实隐式指定了采用内连接检索,它和下面这条HQL语句等价:Fromorderojoi
ocustomercwherec
amelike‘zhao’隐式内连接只适用于多对一和一对一关联,不适用于一对多和多对多关联,另外QBC查询不支持隐式内连接检索。3、右外连接检索:由于fetch关键字只能应用于i
erjoi
和leftjoi
,因此对于右外连接检索而言,就不存在所谓的迫切右外连接查询了,使用右外连接见如下代码:Queryquerysessio
createQuery“fromCustomercrightjoi
cordersowherec
amelike‘zhao’”Listlistquerylistfori
ti0ilistsizeiObjectobjsObjectlistgetiCustomercustomerCustomerobjs0orderorderOrderobjs1右外连接检索对集合元素的检索策略以及返回结果集中的对象类型都采用与左外连接一样的方式。4、交叉连接:对于不存在关联关系的两个实体对象,不能使用内连接查询,也不能使用外连接查询,此时可以使用具有SQL风格的交叉连接,如下面代码:SelectcIDc
amecageoIDoorder
umberocustomer_IDFromCustomercOrdero这个HQL语句将会执行交叉连接检索,而且将会返回customer表和order表的笛卡儿积关联结果。5、连接查询运行时检索策略总结:①、如果在HQL和QBC查询中没有指定检索策略,那么将会使用映射配置为件中指定的检
f索策略,但是这里有一个例外,那就是HQL检索总是会忽略实体映射配置文件中对关联实体指定的迫切左外连接检索策略,也就是说如果配置文件中指定对关联实体采用迫切走外连接检索,但是在HQL查询语句中没有指定这种检索策略,此时Hiber
ate将会忽略这种检索策略,而依然采用立即检索。因此如果希望采用迫切左外连接检索,就必须在HQL语句中明确指定。②、如果在HQL或者QBC检索中明确指定了检索策略,就会覆盖配置文件中的默认检索策略,HQL查询中通过leftjoi
fetch和i
erjoi
fetch来明确指定检索策略,QBC查询中在在通过FetchModeDEFAULTFetchModeEAGERFetchModeLAZY来明确指定检索策略。①、目前的Hiber
ate的各种版本中,只允许在一个查询中迫切左外连接检索一个集合,即只允许存在一个一对多关联,但是允许存在多个一对一和多对多关联。
fr