Hibernate學(xué)習(xí)筆記3

      網(wǎng)友投稿 853 2025-04-01

      hibernate學(xué)習(xí)筆記3

      學(xué)習(xí)課程:

      13_

      多對(duì)一關(guān)聯(lián)映射.avi

      hibernate_03_manyToone

      14_

      一對(duì)一主鍵關(guān)聯(lián)映射_單向.avi

      Hibernate_04_oneToone_pk_1

      14_

      一對(duì)一主鍵關(guān)聯(lián)映射_雙向.avi

      Hibernate_05_oneToone_pk_2

      16_

      一對(duì)一唯一外鍵關(guān)聯(lián)映射_單向.avi

      Hibernate_06_oneToone_upk_1

      16_

      一對(duì)一唯一外鍵關(guān)聯(lián)映射_

      向.avi

      Hibernate_07_oneToone_upk_2

      學(xué)習(xí)內(nèi)容:

      多對(duì)一關(guān)聯(lián)映射

      一對(duì)一主鍵關(guān)聯(lián)映射_單向

      一對(duì)一主鍵關(guān)聯(lián)映射_雙向

      一對(duì)一唯一外鍵關(guān)聯(lián)映射_單向

      一對(duì)一唯一外鍵關(guān)聯(lián)映射_雙向

      一對(duì)一主鍵關(guān)聯(lián)映射_單向

      一對(duì)一主鍵關(guān)聯(lián)映射_雙向

      一對(duì)一唯一外鍵關(guān)聯(lián)映射_單向

      一對(duì)一唯一外鍵關(guān)聯(lián)映射_雙向

      1.

      多對(duì)一關(guān)聯(lián)映射

      多對(duì)一關(guān)聯(lián)映射

      關(guān)聯(lián)映射的本質(zhì):

      *

      將關(guān)聯(lián)關(guān)系映射到數(shù)據(jù)庫(kù)(關(guān)聯(lián)關(guān)系:對(duì)象模型在內(nèi)存中的一個(gè)或多個(gè)引用)

      在多的一段的映射文件加入

      在"多"的一端加入字段作為外鍵參照"一"端

      重要屬性(cascade)級(jí)聯(lián)

      *

      級(jí)聯(lián)的意思是指定兩個(gè)而對(duì)象之間的操作聯(lián)動(dòng)關(guān)系,對(duì)一個(gè)對(duì)象執(zhí)行了操作之后,對(duì)其指定的

      級(jí)聯(lián)對(duì)象也需要執(zhí)行想同的操作

      *

      總工可以取值為:?all、none、save-update、delete

      *all——

      代表在所有的情況下都執(zhí)行級(jí)聯(lián)操作

      *none——

      在所有的情況下都不執(zhí)行級(jí)聯(lián)操作

      *save-update——

      在保存和更新的時(shí)候執(zhí)行級(jí)聯(lián)操作

      *delete——

      在刪除的時(shí)候執(zhí)行級(jí)聯(lián)操作

      *

      如:

      cascade="all"/>

      persistent

      狀態(tài)的對(duì)象不能引用?transisent狀態(tài)的對(duì)象

      testLoad1

      查詢保存在user_message中的數(shù)據(jù)信息,以及相關(guān)外鍵的信息

      1.

      修改原先定義好的User類中id屬性類型為int

      2.

      在User.hbm.xml文件中添加字段,修改生成策略為native

      3.

      新建Group.java實(shí)體類添加字段?id?name?以及get和set方法?id類型int?name類型String,并且生成相應(yīng)的配置文件,其中生成策略為native

      4.

      執(zhí)行testExport.java

      測(cè)試類中方法的主要代碼片段:

      所有測(cè)試方法,以及其作用

      testManyToOne1 不保存Group對(duì)象,會(huì)報(bào)錯(cuò)

      testManyToOne2 保存Group對(duì)象,不會(huì)報(bào)錯(cuò)

      testManyToOne3 不保存Group對(duì)象,但是設(shè)置cascade屬性為all,不會(huì)報(bào)錯(cuò)

      testLoad1 查詢保存在user_message中的數(shù)據(jù)信息,以及相關(guān)外鍵的信息

      testManyToOne1

      Group?group?=?new?Group();group.setName(?"科學(xué)家"?);User?user?=?new?User();user.setName(?"愛(ài)因斯坦"?);user.setAge(?20?);user.setCreateTime(?new?Date()?);user.setExpireTime(?new?Date()?);user.setGroup(?group?);?session.save(?user?);

      testManyToone2

      Group?group?=?new?Group();group.setName(?"科學(xué)家"?);session.save(?group?);User?user?=?new?User();user.setName(?"愛(ài)因斯坦"?);user.setAge(?20?);user.setCreateTime(?new?Date()?);user.setExpireTime(?new?Date()?);user.setGroup(?group?);session.save(?user?);

      testManyToone3

      Group?group?=?new?Group();group.setName(?"科學(xué)家"?);User?user?=?new?User();user.setName(?"愛(ài)因斯坦"?);user.setAge(?20?);user.setCreateTime(?new?Date()?);user.setExpireTime(?new?Date()?);user.setGroup(?group?);session.save(?user?);

      testLoad()

      測(cè)試結(jié)果:

      Hibernate:

      向?user_message中發(fā)送查詢語(yǔ)句

      愛(ài)因斯坦

      Hibernate:

      group_message

      表發(fā)送查詢語(yǔ)句

      科學(xué)家

      User?user?=?(?User?)session.get(?User.class?,??1?);System.out.println(?user.getName()?);System.out.println(?user.getGroup().getName()?);

      2.

      一對(duì)一主鍵關(guān)聯(lián)映射_單向

      一對(duì)一關(guān)聯(lián)映射(one-to-one)

      *

      兩個(gè)對(duì)象之間是一對(duì)一的關(guān)系,如Person—IdCard

      *

      有兩種策略可以實(shí)現(xiàn)一對(duì)一的關(guān)聯(lián)映射

      *

      主鍵關(guān)聯(lián):即讓兩個(gè)對(duì)象具有相同的主鍵值,?以表明他們之間的一一對(duì)應(yīng)的關(guān)系,

      這樣可以避免多余的字段被創(chuàng)建;?數(shù)據(jù)庫(kù)不會(huì)有額外的字段來(lái)維護(hù)它們之間的關(guān)

      系,僅通過(guò)表的主鍵來(lái)關(guān)聯(lián)

      *

      唯一外鍵關(guān)聯(lián):外鍵關(guān)聯(lián),本來(lái)是用于多對(duì)一的配置,但是如果加上唯一的限制之

      后,也可以用來(lái)表示一對(duì)一關(guān)聯(lián)關(guān)系。

      單向關(guān)聯(lián)?:只能一端訪問(wèn)另一段。

      雙向關(guān)聯(lián)?:兩端可以進(jìn)行互相訪問(wèn)。

      hibernate_04_oneToone_pk_1

      例子

      Person

      :(int?id?),(String?name),(IdCard?idCard)

      IdCard

      :(int?id?),(?String?cardNo)

      Person

      中的id字段作為一個(gè)外鍵參照IdCard中的id字段,

      即Persion中的id字段的數(shù)據(jù)來(lái)源于IdCard中的id字段值,共享IdCard的主鍵

      設(shè)置Person.hbm.xml生成策略為foreign,加參數(shù)idCard

      只是Hibernate怎么加載它的關(guān)聯(lián)對(duì)象,默認(rèn)根據(jù)主鍵加載

      (外鍵約束,表名當(dāng)前主鍵上存在一個(gè)約束,Person

      的主鍵作為外鍵參照IdCard)?>

      一對(duì)一關(guān)聯(lián)映射中默認(rèn)了cascade屬性

      所以不用保存IdCard就能夠運(yùn)行成功。

      session.save(person);

      執(zhí)行過(guò)該語(yǔ)句后Hibernate發(fā)送insert?into?idCard_message

      當(dāng)提交事務(wù)以后Hibernate再發(fā)送insert?into?person_message

      session.get(

      類名,id值);

      通過(guò)人來(lái)查找身份證號(hào)。

      測(cè)試類,方法的主要代碼:

      testSave()

      Group?group?=?new?Group();group.setName(?"科學(xué)家"?);User?user?=?new?User();user.setName(?"愛(ài)因斯坦"?);user.setAge(?20?);user.setCreateTime(?new?Date()?);user.setExpireTime(?new?Date()?);user.setGroup(?group?);

      testLoad()

      Person?person?=?(Person)?session.get(?Person.class?,?3?);System.out.println(?"person.name?=?"?+?person.getName()?);System.out.println(?"person.idCard?=?"?+person.getIdCard().getCardNo());

      2.

      一對(duì)一主鍵關(guān)聯(lián)映射_雙向

      Person?<---->?IdCard

      在IdCard端持有person的引用

      在IdCard.hbm.xml中加入

      指向person?指示Hibernate如何加載person

      默認(rèn)根據(jù)加載主鍵

      進(jìn)行加載的時(shí)候,使用IdCard查詢Person.name

      只發(fā)送一條查詢語(yǔ)句,fatch默認(rèn)join,只發(fā)送一條外連接

      相關(guān)主要代碼:

      testSave

      ()

      添加數(shù)據(jù)

      IdCard?idCard?=?new?IdCard();idCard.setCardNo(?"1111111"?);Person?person?=?new?Person();person.setName(?"太陽(yáng)星"?);person.setIdCard(?idCard?);

      testLoad1

      ()

      IdCard

      -->

      Person

      進(jìn)行查詢數(shù)據(jù)

      IdCard?idCard?=?(IdCard)?session.get(?IdCard.class,?1?);System.out.println(?"person.name?=?"?+?idCard.getPerson().getName()?);System.out.println(?"person.cardNo"?+?idCard.getCardNo()?);

      testLoad2

      ()

      Person

      -->

      IdCard

      進(jìn)行查詢數(shù)據(jù)

      Person?person?=?(Person)?session.get(?Person.class?,?1?);System.out.println(?"Person.name?=?"?+?person.getName()?);System.out.println(?"Person.cardNo?=?"?+?person.getIdCard().getCardNo()?);

      3.

      一對(duì)一唯一外鍵關(guān)聯(lián)映射——單向

      多對(duì)一映射的特例

      hibernate04_oneToone_upk_1

      person_message

      與idCard_message?增加字段IdCard,person主鍵自增

      顯示多的一端的多重性唯一

      相關(guān)主要代碼:

      testeSave()

      添加數(shù)據(jù)

      IdCard?idCard?=?new?IdCard();idCard.setCardNo(?"1111111"?);session.save(?idCard?);Person?person?=?new?Person();person.setName(?"太陽(yáng)星"?);person.setIdCard(?idCard?);

      testLoad()

      Person

      -->

      IdCard

      Person?person?=?(Person)?session.get(?Person.class?,?1?);?System.out.println(?"person.name?=?"?+?person.getName()?);System.out.println(?"person.idCard?=?"?+?person.getIdCard().getCardNo());

      4.

      一對(duì)一唯一外鍵關(guān)聯(lián)映射——雙向

      在idcard中加入字段person

      Hibernate學(xué)習(xí)筆記3

      采用one-to-one來(lái)進(jìn)行映射?,指示hibernate如何加載其關(guān)聯(lián)對(duì)象,默認(rèn)根據(jù)主鍵加載person,因?yàn)橥怄I

      關(guān)聯(lián)映射中采用,因?yàn)閮蓚€(gè)實(shí)體采用的是person的外鍵進(jìn)行維護(hù)的關(guān)系,所以不能指定主鍵加載person,

      而要根據(jù)person的外鍵進(jìn)行加載,所以設(shè)置property-ref屬性來(lái)指定向哪個(gè)字段進(jìn)行比較

      相關(guān)主要代碼:

      testSave

      ()

      添加數(shù)據(jù)

      IdCard?idCard?=?new?IdCard();idCard.setCardNo(?"1111112"?);session.save(?idCard?);Person?person?=?new?Person();person.setName(?"太陽(yáng)星"?);person.setIdCard(?idCard?);

      testLoad1

      ()

      IdCard

      -->

      Person

      進(jìn)行查詢數(shù)據(jù)

      IdCard?idCard?=?(IdCard)?session.get(?IdCard.class?,?1?);System.out.println(?"person.name?=?"?+?idCard.getPerson().getName()?);System.out.println(?"person.idCard?=?"?+?idCard.getCardNo()?);

      testLoad2

      ()

      Person

      -->

      IdCard

      進(jìn)行查詢數(shù)據(jù)

      Person?person?=?(Person)?session.get(?Person.class?,??1?);?System.out.println(?person.getName()?+?"???"?+?person.getIdCard().getCardNo()?);

      提示:

      修改one-to-one中的屬性不用重新生成表

      修改many-to-one中的屬性需要重新生成表

      XML

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:excel打開(kāi)表格后很卡的解決方法(excel表格打開(kāi)就卡)
      下一篇:硬件工程師其實(shí)拼的是細(xì)節(jié)
      相關(guān)文章
      亚洲精品国产成人| 亚洲女人被黑人巨大进入| 中文字幕亚洲不卡在线亚瑟| 亚洲精品无码专区在线| 亚洲天堂2017无码中文| 亚洲国产av美女网站| 亚洲美女色在线欧洲美女| 久久久久久亚洲av成人无码国产| 国产精品亚洲аv无码播放| 亚洲精品无码Av人在线观看国产 | 亚洲欧洲日产国码www| 亚洲免费在线视频| 少妇中文字幕乱码亚洲影视| 亚洲网址在线观看你懂的| 久久久久亚洲av无码专区导航| 亚洲高清在线观看| 亚洲精品私拍国产福利在线| 久久亚洲私人国产精品vA| 亚洲精品乱码久久久久久下载| 亚洲欧洲视频在线观看| 亚洲短视频男人的影院| 亚洲AV综合色一区二区三区| 亚洲国产国产综合一区首页| 久久久久亚洲精品天堂| 亚洲国产成人精品无码区在线秒播| 亚洲国产成人久久综合一区| 色噜噜亚洲男人的天堂| 亚洲欧美成aⅴ人在线观看| 亚洲精品乱码久久久久久蜜桃图片| 亚洲avav天堂av在线网毛片| av无码东京热亚洲男人的天堂| 亚洲精品无码久久不卡| 亚洲精品无码mv在线观看网站 | 国产AV无码专区亚洲AVJULIA| 亚洲va在线va天堂va不卡下载 | 亚洲a∨国产av综合av下载| 亚洲成a人在线看天堂无码| 亚洲第一成人影院| 亚洲精品无码专区久久久| 亚洲综合在线视频| 久久国产亚洲精品|