00:00
下边呢,我们来说一下如何在GPA里边去映射关联关系。我们分为这样的五小节来说,第一小节来说,如何映射单向多对一的关联关系。实际上这么多关联关系,其中最重要的就是这个单项多对一的关联关系,它也是使用最多的一种。我们看我们的这个city,目前有一个cat。单向多对一的关联关系,使用订单跟客户是最好的吧,所以说我再来创建一个order。我要建立单项多对一的关联关系,一个客户可以有多个订单,但是一个订单只能属于。一个客户。对吧,它们之间从al到卡就可以是一个单向多对一的关联关系,我把这个类的话呢,我来写上ID。
01:06
Name,喜欢。Get settle。实际上这就是一个单向多对一的关联关系,Al里边有卡,而卡里边并没有al的集合属性吧,没有,好了,下面的话呢,我们来给它加上对应的注解,首先你得是一个实体类。然后加上一个table name等于GPA orders。然后来映射组件ID generated value,使用默认的组件生成方式。
02:01
映射列名column。All name,好的。重要的地方在这呢?如何来映射单向多对一的关联关系,At money one,多对一对吧。这个应设at John column,外界列的列名是name等于CID,这样就映射成功了。使用a money to one来映射多对一的关联。关系,使用at join column来映射外键,具体呢?用name属性来映射外键列的列名。
03:11
还有错误对吧。是因为我没有把这个类加到per配置文件里边来。CRV保存这个时这个错什么没有了吧。下面来进行测试。Public money to one at,我们先让GPA来生成数据表,我们看看那数据表的结构对不对?跑起来。嗯,正常通过,目前只有一张数据表,我刷新。大家看有这个JP orders吧,右键auto cable,我们看这个时候确实有这个外键吧,Customer ID指向JPA的主件。
04:08
数据表生成是OK的,我们先来测试一下这个啊。添加,这叫persistence persistence。是吧?提现了一个方法,好了,我们首先呢,我们来创建一个卡通对象。Control c。我的这个值呢,我改为FF。F,这是一个customerma,我来创建多个。Order一等new order。order1.setname。F1。Order order two等。new order。
05:06
Order two.set name o two。设置关联关系,Orderor,一点一点,Order two.said。卡好了执行保存操作。manager.persist。我先来保存customer manager.ist保存ORDER1MANAGER点保存order two。找一个看看效果,走起。没跑起来呀,对,看一下。
06:03
啊,没问题,好的,看一看,诶两条记录都是七是吧,这里面插入了一个七这条记录,OK,这个是。没问题的。好的。跟我们预想的一样,现在的话呢,思考这样一个问题,这个顺序调换一下的话。会有什么其他的这个不一样的地方吗?我们首先看一下刚才那个circle口是不是三条insert呀,Insert insert insert,现在的话呢,我先来保存order,后保存customer,我来问大家。第一个能不能保存成功?第二个,如果能成功的话,这个SQL语句会发生变化吗?你来想一想。
07:00
好的,我们试一下。瞧着走。首先成了先看结果。八这个也没问题对吧?啊,这名我忘改了是吧?这个得改。这个的叫什么呀?叫Gigi。来不及了哈,那我就改这个里边吧。就是跟上面那个区分它不一样吗。那么保存成功了,这个没问题,下面我们看SQ语句会有变化吗?看见什么了?是不是看见了三条insert,两个update啊,能不能理解?能不能理解,因为我在保存order的时候怎么了,这个时候我还不知道谁是跟我关联的customer呢,所以说保存order的时候。看一下这个时候呢,这个外键裂的。
08:01
外间列的这个值实际上是闹,我只有在保存完这个卡之后,我才知道外间列是谁吧,就这个时候这个卡才有这个卡这个记录才有ID嘛,然后GPA。去维护这个关联关系,他又额外的发了两个update,所以说我们的建议跟以前甲哈的建议是一样说。呃,保存。多对一是。建议先保存E的一段,后保存多的一段。这样不会。多出额外的update。好的,这就是我们的保存,我们再来看一看,获取test many to。
09:09
Wind获取我肯定是要干什么呀,先获取order啊,等于ntt manager.find order.class1sit out order.get order,然后sit out or the.get cut.get。Last name好找一个看看效果。执行通过我们来看一我们什么呀,看一下我们的这个SQL语句,大家看一下它默认是什么,默认是主要链接呀,就是说在我获取out的时候,通过主页链接把卡头搞出来了吧,诶这是一个信息默认情况下。
10:00
使用。左外链接左。链接的方式来获取。多的一端的对象和其关联的一的一端的对象,哎,默认是这样,那么我们能够改为懒加载吗?改谁啊改。这个里面我们想改为懒加载。万to one里面out斜杠,我们看是不是有一个fetch啊,等于大家看有一个什么,有一个E,还有一个lazy,我给它改为lazy,使用懒加载的方式。再找看字口语句,这个说什么了,是不是两条circle口啊,同时的话呢,看到先打的order后打的卡看见了吗?先打的order。
11:08
这么说哈,先打的信息,后发的查询卡这个语句吧,所以说这个时候确实是蓝加载。CTRLC过来。在这儿,在这儿。可以使用。Eight money to one。One的fe属性来修改。默认的。关联属性,关联属性的加载。策略。TCTRLC这个的话呢,这块我们也复制一份,诶这就是。获取的方式。好的。再来研究一个删除public test to目这个瑞木的话呢,我想。
12:13
去删除order肯定是随便删除是吧,这个没有什么讲的n manager点。Order随便删就可以了,一删除看一下。只发了一个什么呀。啊,一个还有一个delete对吧,这个时候这条记录被删除了,没问题好了,下面的话呢,我来删除一的一段,大家说能不能让删呢。谁呢,七?七看看哈,Customer customer等于entity manager.find customer.class。
13:02
七。Manager点绿幕。我的问题是,我能够直接删除这个对象吗?研究研究这个时候怎么了,我要是删他的话,比方是那个七,这里面是不是有这么一个外键关联的呀。对吧,早。看效果。删不了吧,因为有一个外键关联说。不能直接。删除一的一段,因为有外界因数。好了,这是删除增删改查,还差一个修改,Test many to wind update。
14:00
这个怎么搞呢?我们直接来获取一个order。然后呢,我order.get.site last name这个值是FFF,修改一下。那一这个已经没有了是吧,改为二二。二所对应的是七,七默认是FF吧,改完之后应该是三个F。找一下。看见update了吧,这个是没问题的。走OK行,以上的话呢,就是我们讲的这个什么呀,叫单向多对一的关联关系,我们再来看一下我们的报里边如何映射的,使用了many to one跟join column这个假话的话呢,是来映射那个外键列的列名吧,是吧,这里面我们可以使用many to one的fe属性来。
15:05
修改默认的加载策略,默认是。Fetch就是什么主要链接,你可以把这个改成。List方式,那其他的呢,实际上跟我们前面平板讲的这个harle是相类似的。
我来说两句