00:00
我们来看一下这个HKL的迫切主要链接,这块呢,实际上想说的是两点,一个是迫切主要链接。一个是左外链接。迫切主要链接使用left join fetch关键词主要链接使用left join。具体的这个区别和用法的话呢,我们通过代码来进行说明。I'm going take left down。Back。Test这个SQL我们来查。Department from。Department d吗?Run。1.employees。瞧瞧。哎。还有一个employees,我们通过这样的方式呢,呃,来连接department跟employee。
01:06
二。等于。三点。KL。找到一个list,他们这边。返回的是什么呀?肯定是一个list是吧。反问的例子里边图放的是什么呀?我是不是查department,所以说我们觉得返回的就应该是department eds等于que.s。Out。E pdspds.size。有一个。
02:05
返回了122条记录。从我们这个搜狗上看的话呢,的确是一个迫切主要链接来,我也来查一下这个。据库看一下。但返回的究竟是什么?是什么呀?这应该是部门的ID是吧?这员工的ID,这是部门的名称。后边呢,呃,员工的名称。后边员工的,呃,其他四段。返回了122条记录,为什么呀?我员工就107个,为什么会返回122条记录呢?我们看到什么呀,看到前面是不是还有一些部门里边没有员工啊。
03:02
它返回的是。满足连接条件的记录和左表里边儿不满足连接条件的连接条件的记录,所以说一共是。122条记录。就是我们最终的结果是吧,那这里边儿的话呢,很显然我这个。部门啊,一共有多少条啊,知道吗,第。GG。Department。Department。部门一共是27条,你给我搞个122是不是多了呀,是不是有重复的呀,这里边肯定会有重复的吗?你方80号部门出现过N多次。怎么把这个重复的去掉呢,说加上一个。Itin,我们希望in,我们希望返回的就是。
04:00
A27条再找一个。除了一个语法的错误哦。写真不行是吧?写前边啊。盯着他D,这样才可以。好。哎,27条没问题,我们可以通过这样的方式去重。或者是呢?有助教先拉一个。或者是就这样。From,你这个里边不是有重的吗?把这个重的给它去掉,Link哈西赛。包装一下。DBTS再用release包装回来。New。
05:01
哎,包装回来不就行了吗?哎,这个时候这个样子,他也可以去中。那种。也是27条,哎,我们有两种驱虫的方式。好了,那它返回在这里边就是department,于是我来打印一下吧。一。DPTDPSDP。打。M加一个。干什么呢,加上这个部门的。员工的数量、一批地点,Employee。嗯,有的部门。
06:03
是五个人一个人啊,还有零个人的,零个人怎么样,这个部门没有员工看到了吧?这就是我们迫切阻碍链接返回的一个结果。参照PPT来说一下。第一个。使用left join关键字代表示迫切主要链接第二个例里边返回的集合里边存放的是实体对象的引用,存谁呀?是不是纯这个department呀,对吧。每个department对象关联的employee集合多倍初始化。瞧瞧我在打这个size的时候,是不是没有额外去发送词汇语句啊?只有一条哈。这个时候的话呢,那department关联那个employee的那个集合呗,初始化。
07:00
里边存放所有关联的employee的实体,如果有重复元素的话,我们可以通过一个hot set去除,去除重复的元素,我们就是这么去的,对吧?通过这样的方式可以去除重复的元素,当然你也可以使用这样的一个select distinct d from也可以。这个我们说的是迫切主要链接。再来搞一个左外连接。Public VO data。段可以不带泛指。会怎么样呢?钝的L等于。From all department。Department。赚1.employees。找一个qua。
08:04
Great。For。结果。感觉得应该是。Apartment的集合吧,但是的话呢,我先不加。等于花点调一下。是什么?走一个。爱。哎哟,换的是什么呀。是什么呀?这么看的话,应该是一个object的一个数组吧。对吧。哎,应该是一个数组。
09:03
为什么是一个数组呢?就是我们没加那个fetch,正常的话呢,我们这个思口语句返回的应该是department对象跟employee对象那。这两个对象刚好构成一个。宿主。它对应着我查询的一条记录,那返回多条记录。不就是一个。附竹组成的。进一步的再测试一下或循环。Object。S。Green are list。OBGS。我需要去重写department employee的做题方法。
10:01
这重写了啊,有个ID。Employed。又一个ID。好,找一个看看。果然。Employee,大家看。这边是不是也有重复的呀。怎么驱虫啊?这是一个数组,我对这个数组驱虫,我也可以使用。前面的办法吗?调一下。Result。New。New linked has said。
11:05
Result。直接看就可以了。这个虫去的不好。说没去了,虫啊。为什么没驱虫啊?因为每个数组实际上都是不一样的吧,你看部门一样,员工是不是不一样啊,所以说不能够使用。啊。用link哈set包装,再用再包装这样的方式驱虫去不了,而且的话呢,我们注意到。通过这样的方式。我们处理起来也非常的不方便,为什么呀?你这是一个数组呀,我们搞这个数组很别扭是吧?那可以怎么办呢?我可以这么写select。然后前面再加上一个一。
12:00
这是可以的,我要这样一写的话,它反问的应该是什么了,然后那应该是department组成的集合,那于是的话呢,这块我需要给他。注意。写。List department EPS等于list。不循环。De PT。DPTS。This outpd.at。STEM。这块打一下这个长度吧。Size。找一个。Select distinct。
13:03
来。上看的话呢,没有重复的。27个没问题。关心的下一个问题是什么呀,这个。关联的那个employee的那个。集合被初始化了吗?然。先猜猜。照理说应该被初始化了吧,因为我刚才我做这个查询的时候,我们看到什么呀,我实际上是不是查到了每一个的每一个employee啊,我都查着了,那这块就应该给我注释花呗。找一个。我们发现每一个打印前面都会有一个select语句。这说明。一个很严重的问题哈。我这个关联那个。Employ那个集合并没有被初始化。看到了吧,但实际上的话呢,通过我们前面我们写这个之前,我们知道,实际上我那个一个一个employee已经。
14:08
查出来了,只是没有。初始化。这就是我们的左外连接。总结一下,主要链接使用left join list方法,默认情况下返回的集合里面存放的是对象数组类型。啊,每一个数组都不是重复的,因为什么部门一样,但是我后面那个员工不一样,所以说我不能够这项这样的方式去除重复的元素。对,它根据配置文件来决定employee集合的检索策略啊,那是fech啊还是lazy啊,怎么样,这个时候根据配置文件。来进行检索,而不是像我不出链接一样,是吧,他把那个集合已经涂刷好了。如果希望例子的方法返回仅包含department对象的话,我们可以在里边加上这个。我们刚才已经加上了,这就是我们的。
15:09
主要链接跟。迫切对外连接,应该说差了一个fe,差了不少事。是吧,所以说的话呢,我们真正进行HQL查询,如果要是需要用到这个表跟表链接的话,我们基本上都使用flash,反正你把那些employ已经全查出来了。那你就把我这个department的集合给组装上呗,你不装不组装上的话,是不是还得再查一次啊,所以说确实是用的话,我们推荐使用这个。Left join fetch的方式。推荐使用它。OK,具体的这个对比的话,大家可以来参照这个PPT,我这块的话呢,就不写了。好,那我们有。呃,迫切主碍链接有主碍链接,同样的也有迫切内链接和内链接,这个迫切内链接跟迫切主外链接有什么区别啊,不返回着表不符合。
16:12
条件的记录,就这么一个区别。那你试想看看。以这个为例吧。改成inner。哦,一个。只返回。11条记录,11条记录怎么来的呀?Distinct。DPTDGG。Employees employ d p t ID is not now。
17:05
11条记录对吧。这块的话呢,也返回了这个11个对象跟那个是对应的,就是不返回左表不符合条件的记录。那其他的这个特性呢,跟我们这个迫切主要链接跟主要链接是一致的。OK,我们举这个例子啊,我们是从。Department到employee,因为这个时候更复杂一些,那反过来我从employee到department。这个时候应该是什么呀,应该是一个。Employee到department应该是一个多到一,我们举一个例子哈,大家可以看一下。Public VO test。
18:01
如果我查到了那个employee的话,那个department肯定比初始化好,他就是一个对象。没有集合的问题对吧。HQL等于写一个啊。From employee。Left run。HER。E pd。直接亮起了啊。第一次听,但这个时候这个呢,实际上是没有重复的是吧。没有重复的,我就不写他了啊。找一个等于。三点。Perl搞一个east。
19:00
返回的肯定是employee的集合。等于点list打印一下ES,填size来链接员工。应该是。107个,这个结果就应该是107。107,好了,我们看一看每个员工的department是不是被初始化了?Emp。Employees。MP name加。加EP点工名跟模名搞。Now。是不是连续打印呢?
20:01
所以说什么了,所以说我们看到这个时候,实际上这个部门已经被初始化了,异常怎么回事。你不是左外链接吗?有的人没有部门,所以说这块应该是一个空,对吧,你改成阴就没这个问题了。是吧,OK,那我要是不加呢。看一下不加泛大可以猜一猜,不加怎么样?我们前面那个要是不加的话。我们发现。它那个集合并没有被初始化,那这个道理是不是一样啊。走一个。哎,美甲在我们是不是看见这个circle了,但是我们也看到了什么呀,我们也看到了。连续的打印。那这些为什么呀,因为这些员工在一个部门我查一次就可以了,但是。
21:04
都是sales啊,这是ping往上翻。Sales sales,你看这块有对应的语句,C评,这个以前已经查过,但是如果你要是一位没查过的话,对不起,我必须要查。这个跟我们前面那个道理是。一样的,所以说的话呢,我们说了一个复杂的这个那个道理一样,大家一推就可以。啊,来看这个。关联级别运行时的检测策略。如果在HPL里边没有显示指定个策略的话,这个时候用配置文件。我们主要是在HQ里边,我们怎么指定啊,我们可以加上那个。FCH。对吧。HKL会忽略配置文件中设置的迫切主要链接监督策略,就是说我们在配置文件里边的话呢,你写那个fat等于join了无效,这个我们在前面已经讨论过了,我如果要是希望HKL采用破译主要链接接检索策略的话,我们必须在HKL里边显示的指定那个。
22:13
使用。若在LKL语句中显示的指定的监测策略,它会覆盖配置文件里边配置内,对吧?这个跟上一句话基本上说的是一个意思。
我来说两句