00:00
下面我们来学习映射一对多关联关系。这个一对多关联关系是har里边最重要的一种关联关系。我们把这个关联关系就是学明白的话,后边的学一对一,多对多就水到渠成。先来看一下这个一对多的关联关系,首先说类与类之间最普遍的关系就是关联关系,给我们讲UML的时候已经说过了,这UML里边关联是有方向的,我们以这个customer跟O为例,客户。Order,订单客户跟订单之间应该是个什么关系啊?是不是一对多呀?一个客户可以有多个订单,但是一个订单只能属于一个客户。这个关联呢,是有方向的,我们有。单向关联还有双向关联,我们来看一下。线关联,如果奥里边有一个对卡的一个引用,应该是单向。
01:05
多对一吧。Order是多是一,一个客户可以有多个订单吗?单项多对一,如果他们里边要是有一个al集合的一个引用的话,是单项一对多。嗯,对应的,如果卡特里边有一个对al的集合引用,Order里边还有对卡的一个引用的话,就是一个双向关联。我们先来看这个单项多对一。单项多对一关联,只需从N的一端可以访问一的一端就可以了。D我在A里边有一个卡引用,而在卡通里边不需要有对。Order集合的引用。啊,预模型就这样。就是写一个类啊,一个有一个order,其中order里边有一个引用。
02:04
而@里边没有奥那个集合的引用合星。那关系数据模型。根据数据库里边如何来表示这个关系啊,说我有一个。订单,这订单属于哪个客户,如何来描述啊?是不是通过这个外键呢,就是说我在奥德表里边的话呢,会多出一列叫卡通ID,它来引用他通表的一个组件,对吧。这是分析数据模型,你把这个搞清楚,我们就可以写了。心念一个包。又对1N突案。捡一个卡。
03:10
我们主要研究的呢,是这个关联关系,所以说这个实体类呢,我就简单的写了哈。对应的盖晒的方法。搞定。来看这个order。欧德里边有一个对cut。对应的盖赛方法。下边生成对应的映射文件。
04:05
It t。两个都要finish。生成的这个HB文件呢,我们多少得改一点,因为这个并不是完全的靠谱。嗯,哈。数据表表明。ID使用啊。Native。Name对吧,因为我们在进行这个命名方式的习惯上的话,我们在。里面是使用这个方法,第二个字母的首字母大写,而在数据库里面我们使用下划线连接。Orders。ID。
05:02
Need。Order name。这个咖如何映射的话呢,我们一会儿来说。这个里边还差一个什么呀。8ID这样写。好,前面这个映射呢,都是很简单的,我们看啊,ID跟name这个我们在前面已经详细的研究过了,Order。我要是抛除这个。Customer的话,这两个映射也非常的简单,对吧,下面我们来映射这个关联关系映射。播对一的关联。关系,看如何用手。显然。这是一个引用类型,我们不能够再使用property。
06:00
Property没法没办法来描述这样的一个关联关系,你不能用,因为这不再是一个组件,不再是一个组成关系,对吧?我们说。主成关系里边我们讲过啊。在实体类里边这个引用的话分为两种,一种叫实类型,一种叫实体类型,类型没有ID。对吧,那我现在这个卡通怎么了,我是不是有ID啊,所以说这个是谁也行。回应社呢说。对,1MONEY。英子。干。必须抱住啊。类是customer,因为这个卡跟他在一个包下。这个我就可以提上去pack。
07:02
这个蓝调。这个叫。好了。刚才的话呢,我们说过。对应的这个关系数据模型是要在这个表里边有一个外建的吧,所以说这个卡通实际上对应的一个列,这列叫。ID对吧。这样就写完了。就通过这样的方式来映射多对一的关联关系,看到了吧?AMA。指的是那个属性名啊,属性名所对应的类。多对一。文从语义上讲,就是在那个多那个表里边需要有一个外键,这就是那外键,下面我们来生成对应的数据表,把这两个呢颠到下面。
08:00
配置文件里面。一个叫。首先是湖畔下边的。图外加变的。一个叫卡。N to,一个叫奥德。这事呢?把这个拿到这里边一份。只留伊尼跟他的删掉。Public world test only to one。At test,咱先来生成数据表,按那个数据表对不对。有一个。
09:15
OK。按一下数据库。看打开。先打开customers,有一个ID跟customer name对吧,看orders。Order ID order name是不是有个cut ID啊?那这室内外键吗?调一下auto cable,看foreign key,大家看这个是不是指向卡通一个主键呢?所以说这个映射就OK了。就是我们的映射是吧,啊映射完了的话呢,我们来测试登山改查操作。有没有什么异样的?
10:01
映射这块,我们把这个笔记呢,简单的我们先来写一下哈。不。使用。突半来映射多对一的关联关系。这里边儿的话呢,有一些属性我们需要说一下。三个属性。第一个是。多。这一端。的属性的。名字就是多这一端。关联的一那一端主听名字波这一端。关联的一那。
11:01
一般的主持的名字是吧,我这叫。后不是有一个卡头吗?或这一端关联那一的一端是不叫卡吗?又指的是这个蜀静宁。半边。Plus。一。R。一端。嗯,属性对应的队名还有一个叫polo。多对一一的一端,在多的一端那个外殿的名字。一那一端。半。多的。一般对应的啊。数据表中的。
12:00
外建的名字。OK。这样就OK了,大家这个的话呢,你从脑海里边想一下哈,我要是一个多对一关联关系的话,我在那个多那个数据表里面有那有一个外键。这么想的话,他就会叮嘱。那边。我们来测试这个方法,先测试这个废物吧。我们来写一个卡吗?六。点name写的AA。然后呢,我们来写order。等于六二。一点。Order。Order order to等于new order。
13:00
Order to.set order him,我们这个叫order。设定。关联关系。好一点。在AMA。2.site。下边执行。Save操作。这个呢有点研究啊,我在执行这个save的时候,我是先保存卡通还是先保存order呢?现在的话呢,按直接按顺序保存哈,我先来保存那个卡。再点save。后边应该是ORDER1跟order order1底下这个叫。好不好找一个。
14:07
我们看。三条insert,先插入一个cut,然后插入一个order,一个order数据表,对不对?没问题,Order来看一二外键是不是写上来啊,插入这样就。没问题了。可以了。真的没问题了吗?喂,嗯,下边的我们这里边啊,我们这个顺序是这样的是吧。我先插入卡,再插入order,我们发现发送了三条银色,这是我们希望的哈。天大入。Customer。在插入order,我们是。三条颜色。
15:02
那我们要说一下抽象一下哈,就是先。放入。E的一段。在。插入多的一段啊。只有颜色的。语句对吧。好,这是我们反过来,我现在我先。插入。Order带入。Customer,大家觉得这样的话他会怎么样?这个的话呢,我暂时先入掉。打一枪。3.order。再来。单纯点save。
16:02
行,那我改一下哈,改成B。三四,大家说我这个插入能成功吗?其一其二,如果成功的话,这个SQ语句会有什么不一样吗?按一下。有。路,你update呀。又一个update,银色,银色,银色的三条,银色两条update。加入成功了吗?OK,看来是成功的。他入世成功了,但是多了两条。Update。说。三条也色。两条。
17:01
Of it。这个有点。我们意外的是吧。一共应该发三条语句,这个给我发了五条,这个效率肯定要低一些。我们说为什么会多了两条update呢?为什么呀?在想我在插入这个order的时候,这个order里边是不是得插入一个cut ID啊,因为我前面没有插入这个卡吗?我是不是还不知道这卡是几的呀,我就只能是把这块成一个空对吧。空好,这也是空,然后插入卡,我把这个卡插入完了,这个时候后才看到是吧?哎。他他妈进去了,那个ID有值了,我为了把这个ID值给它插进去,是不是还有两条额外的update?一样的道理,所以说呢。这个是先。
18:01
插入。N的一段。在插入。一对一段。会。播出。Update。嗯,为什么我们刚才也讲了,再说一遍。我在插入。波的一端的时候。我还没有办法确定那个外间值是几。对吧。我只有把这个一的一端插入了,我才能够去定那个外键值,所以说会多出update。因为。在插入。多的一端时。无法确定。一档一端的。
19:01
拜见职。注。只能,嗯。一的一端。插入后。在。额外。发送。Of it。也就是我们说的这个最有方法,所以说怎么样推荐。先发路。一对一的。Who car?一。刚入了。下面我们来看查询。Public world test money to wind。
20:13
这个查询呢,我肯定要是查这样的一个引用关系的查询,我要是只查一个卡,只查一个order就没意思了,是吧,我应该是查order,通过那个order再去查我关联那个customer。写order等于section.get点一。找一个it she out order get order name。我的问题是我在查这个order的时候,他会把关联那个卡也查出来吗?会吗?
21:02
我看到了,这不仅查这个凹啊,这不没有查出对应的卡啊。看到了吧,所以说第一个结论说若。查询。多的一端的一个对象。得默认情况下。纸。查询啦。拨打一端啊。对象而没有。查询。关联的。一。那一端啊,对象是这样吧,这个呢,有一个名叫延迟加载,后边我们还会来解释。
22:01
那我要是需要查的时候怎么办呢?比方说我需要得到卡的吗?等于order.get customer。Or?点name。再找一个。家看。什么个情况?先打的奥特一吧,在我确实是需要用到关联对象的时候,他才。八送对应的词后语句。二。在需要使用到。关联的对象时才发送。Be,应的啊。Circle语句,哎,这叫蓝家在。
23:00
好了,就是我们看到的情况哈,我要是只查一个order对象的话,那他就查了一个order,而没有去查我关联的对象。在你需要用到关联对象的这个处境的时候,那我这来讲。三个问题。我们这前面讲过一个。懒加载异常还记得。讲那个录的方法的时候,有一个懒加在异常这块呢,也会有这样的一个情况在身前close,比方说这个三身关了。你掉啊。大家说这个时候我会有这个卡,他会怎么样?他会怎么样啊?有一个。诶,又会发生这样的一个懒加载异常,看到了吧。三。
24:01
查询partner对象是。卡通对象就是一那一端对象的时候,我指的是由多的一端啊,一那端的时候。有解释一下啊,多的一端导航哦。一。一端时可能会发生。懒搭在一旁哟。AC,依你啊。Exception。可能会发生这个。为什么呀?为什么呀,就是说这个时候如果我在导航这个对象的时候,在这眼镜关了会有这个异常。
25:02
若若此时三身已被。NB。则会发生这个遗传不是可能了哈,是一定。辉煌。这个异常。默认情况下。为什么叫默认情况啊,就是说在默认用懒加载的时候,如果我们这块要是用了这个一时加载的话,就不会有这个异常,这个后边的话呢,我们会讲到。好了。那既然你三身要是一般的话,我会有这个异常,那我们第四点我们再说一个吧。说我这块我。我关联这个。Customer是个神马东西啊?
26:03
这个什么呀。讲那个斗的方法的时候,我们也打印过这件事吧,他是个什么呀,应该是一个。代理。大家看是不是一个代理呀,对,是一个代理对象。四来获取。对象时默认情况下。默认情况下。其。关联的对象是一个代理对象。看到了吧,我们用那个漏的方法获取那个。数据库。记录对象是不是也是一个代理对象啊,直到我真正用它那个属性的时候,他才会把那个代理对象进行初始化,如果进行初始化之前把再生关了,会发生那个懒加载异常了吗?整个这个过程,那个过程是。
27:12
一致的。这个是我们。带情况好,后面这两个情况的话呢,会比较简单。Public test update。Update。这个正常,我们说我来获取一个order等于三点order.class1。有来凹点customer点在name目前这名叫啥呀。AK多加一个A。AAA啊,这样的这种情况的话呢,它也会发送对应的二有一个。
28:02
大家看。没发出update,为啥呀?因为我在前面测试的时候,我把这个。住掉了是吧,这个事物诞生住掉了这种。看有对应的update。改了没问题。下一个做一个删除。他们有个铁。It。我要是单独去删除一个order的话,没什么说的啊,我说我要去删除一个卡,他会怎么样。创建一个cut。等于放假了,回去吧。赛点上一。
29:00
强转能删吗?能删吗?不能删吧,因为我这个卡吗,就那边是不是有引用啊,外界让人引着呢,怎么删呢。删不了。能删除说删除说在不设定。及联关系的情况下。不能。直接。删除。一者。一端的。对想应该再说一个是吧。切。你这。一端的。
30:01
对象有。多的。对象在。引用。则能删除。你想明白吧,如果我我现在的话,我想删他这块,这两个关联关系都没了。我是不是可以删了。你是光杆的。可以删了,所以说应该是两个哈,第一个就是没有设定这个,接连我们后边我们会讲这个连操作。一连删除没有这个级联,而且一的一端。对象还有N的对象在引用的话能直接删除。来整个看一下,这个就是我们讲的这个单项作对一首先的话呢,我们来看这个映射,映射我们用的是。
31:02
Many to one ask跟po这个呢,大家主要是在脑子里边有这样的一个图,我说。坡的一端。如何说我这个多属于哪一个一啊,就是多的这端有一个外键在关联的那个一,所以说的话呢,这个应该是跟我们这个,嗯。Java模型有一个有这样一个对应是吧,奥德里边有一个卡,那在奥德利数据表里边有一个外键有卡ID,这名随便起你就可以叫pass ID。并不是说这个名必须跟。这个一致不是这样的哈,好吧,就是我们这块说的这个。映设,然后的话呢,我们讲到了登删改查操作,在添加的时候,我们推荐大家先插入。B的一端再插入N的一端,这个时候不会额外多出。
32:03
大家需要知道,我要先插多的一端,再插一的一端,为什么会读update,你这块的话呢,我们已经写清楚了。第二个我们说的是获取操作。我在获取的时候呢,默认情况下就是我不设置那个类C属性,我们后边会讲默认情况下,要想我在获取一个al对象的时候就获取out。他不会把我order关联那个卡一并进行初始化,这个时候这个卡是什么呢?它实际上是一个代理对象。那直到我具体需要用这个对象的时候,他才会对这个代理对象进行初始化。因为是一个代理对象,需要对代理对象进行初始化,所以说我在代理对象初始化之前。你把赛程关了,有可能会发生这个懒加载异常,这个跟我们那个漏的方法是一致的。
33:07
的方法里边也有这些事儿。更新这个没啥说的,嗯,一会有一个几连的问题。为什么会有一个接连的问题啊,你把我你想删除一的一端的一条记录,而那一端还有引用呢,那我当然删不了。是定人关系不?对。
我来说两句