多对一单向关联映射
? ? ? 今天就來(lái)說(shuō)說(shuō)多對(duì)一的關(guān)聯(lián)映射。
? ? ? 數(shù)據(jù)庫(kù)中有多對(duì)一的關(guān)系,Hibernate自然也有對(duì)象的多對(duì)一的關(guān)聯(lián)關(guān)系。比如用戶和用戶組,一個(gè)用戶只屬于一個(gè)組,一個(gè)組有多名用戶。我們就可以說(shuō)用戶和用戶組的關(guān)系就是多對(duì)一的關(guān)系。用對(duì)象的uml圖表示一下:
? ? ? 在Hibernate中如何來(lái)實(shí)現(xiàn)呢?首先定義這兩個(gè)實(shí)體類:
[java] view plain copy print?
hibernate.cfg.xml配置文件:
[html] view plain copy print?
hibernate.properties配置文件:
[html] view plain copy print?? ? ? 這是最基礎(chǔ)的準(zhǔn)備工作,多對(duì)一映射在對(duì)數(shù)據(jù)進(jìn)行更改時(shí),會(huì)有一些限制。當(dāng)沒(méi)有該用戶組時(shí),添加用戶,就會(huì)出錯(cuò),當(dāng)該用戶組有用戶時(shí),刪除該用戶組也會(huì)報(bào)錯(cuò)。
? ? ? 我們當(dāng)然可以按一般的方法來(lái)做。添加的時(shí)候,先手動(dòng)添加組,再添加用戶。刪除時(shí),先刪除所有的用戶,再刪除用戶組。但是Hibernate為我們提供了一種便捷的方式——many-to-one。在映射文件hbm.xml中配置后,就可以不用再想那些限制了。Hibernate會(huì)自動(dòng)添加上所引用的數(shù)據(jù)。
? ? ? 給出映射文件:
[html] view plain copy print?
? ? ? ?配置了many-to-one會(huì)自動(dòng)在t_user表中創(chuàng)建外鍵groupid,與t_group的id映射。
? ? many-to-one標(biāo)簽用到了cascade,指定兩個(gè)對(duì)象之間的操作聯(lián)動(dòng)關(guān)系,對(duì)一個(gè)對(duì)象執(zhí)行了操作之后,對(duì)其指定的級(jí)聯(lián)對(duì)象也需要執(zhí)行相同的操作。其屬性值如下:?
- all:在所有的情況下都執(zhí)行級(jí)聯(lián)操作;
- none:在所有情況下都不執(zhí)行級(jí)聯(lián)操作;
- save-update:在保存和更新的時(shí)候執(zhí)行級(jí)聯(lián)操作;、
- delete:在刪除的時(shí)候執(zhí)行級(jí)聯(lián)操作。
? ? 測(cè)試類Many2OneTest:
[java] view plain copy print?
? ? ? 結(jié)果圖:
?執(zhí)行測(cè)試前:? , 執(zhí)行測(cè)試后:??
? ? ? 用many-to-one進(jìn)行配置后,hibernate會(huì)自動(dòng)去添加外鍵,而我們做的任何操作都不需要去考慮它的結(jié)構(gòu),也不用手動(dòng)去維護(hù)這個(gè)關(guān)系,關(guān)系由Hibernate自動(dòng)維護(hù)。這就是Hibernate的魅力所在。
總結(jié)
- 上一篇: 一对多单向关联映射
- 下一篇: hibernate映射一对多双向关联关系