全球旧事资料 分类
下面这一部分我们将通过这两种查询技术,来详细讨论有关Hiber
ate对连接查询支持的各个细节。在讲解连接查询之前,我们先来回忆一下在第一部分中讲解的有关实体关联关系的映射,在实体的配置文件中可以通过配置集合元素来指定对关联实体的映射以及检索策略。(请参考第一部分相关内容)因此我们可以在实体映射配置文件中,指定关联实体检索策略,对关联实体的检索策略可以指定为“延迟检索”,“立即检索”,“迫切左外连接检索”,如下所示对与Customer实体关联的Order实体设置延迟加载:set
ame”orders”i
verse”true”lazy”true”这种在实体映射配置文件中设定的检索策略,称为默认检索策略,但是这种默认检索策略是可以被覆盖的,那就是在程序代码当中可以动态指定各种迫切检索策略来覆盖默认检索策略。1、迫切左外连接查询和左外连接查询:我们看以下代码,这段代码将覆盖映射文件中的检索策略,显示指定采用迫切左外连接查询。HQL查询方式:Queryquerysessio
createQuery“fromCustomercleftjoi
fetchcordersowherec
amelike‘zhao’”Listlistquerylistfori
ti0ilistsizeiCustomercustomerCustomerlistgetiQBC检索方式:Listlistsessio
createCriteriaCustomerclasssetFetchMode“orders”FetchModeEAGERaddExpressio
like“
ame””zhao”MatchModeSTARTlistfori
ti0ilistsizeiCustomercustomerCustomerlistgeti我们看到在HQL以及QBC查询中分别通过leftjoi
fetch和FetchModeEAGER来指定采用迫切左外连接检索策略,当采用了迫切左外连接检索策略时,当进行检索时即执行查询的list方法时,将会立即初始化用来容纳关联实体的集合对象元素,如果在实体映射配置文件中对关联实体设置了延迟加载,那么此时将会忽略延迟加载设置,而采用迫切左外连接策略,并且立即用关联实体对象填充集合对象元素,即使用Order对象填充Customer对象的orders集合。因此这种检索策略会马上创建关联实体对象,此时我想你一定会想到这种检索策略会同时检索出Customer和Order实体对象对应的数据,并且分别创建这两个对象。恭喜你答对了,因此上面代码会生成类似如下的SQL语句:Selectfromcustomercleftjoi
orderoo
cidoidwherec
amelike‘zhao’如果我们忽略了fetch关键字,就变成了左外连接查询,如下面代码:Queryquerysessio
createQuery“fromCustomercleftjoi
cordersowherec
amelike‘zhao’”Listlistquerylist
ffori
ti0ilistsizeiObjectobjsObjectlistgetiCustomercustomerCustomerobjs0orderorderOrderobjs1r
好听全球资料 返回顶部