欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Hibernate的父子關(guān)系和多對多的關(guān)系
http://www.6gee.com/user1/10477/archives/2006/20624.htmlHibernate的父子關(guān)系和多對多的關(guān)系

在Hibernate中,在對象和對象間存在下面幾種關(guān)系:一對一,一對多,多對一和多對多,一對一比較簡(jiǎn)單,這里我不講了,今天主要談?wù)劯缸雨P(guān)系和多對多的關(guān)系

   先談?wù)劯缸雨P(guān)系.假設我們有一個(gè)簡(jiǎn)單的從ParentChild對象的<one-to-many>關(guān)聯(lián):

<set name="children">

      <key column="parent_id"/>

      <one-to-many class="Child"/>

</set>

     建立了上面的映射,我們可以在編寫(xiě)下面的代碼來(lái)實(shí)現

      Parent p=newParent();

      Child c=newChild();

     p.getChileren().add(c);

     session.save(p);

     session.flush();

     我們來(lái)分析下到底Hibernate為我們做了什么

     首先創(chuàng )建Insert語(yǔ)句來(lái)生成Child記錄

     然后通過(guò)update來(lái)更新parent到child之間的關(guān)系

     但是我們仔細分析發(fā)現這里面存在一個(gè)很大問(wèn)題,問(wèn)題出在insert一個(gè)child時(shí)候,這時(shí)把child記錄中的parent_id設置為null,原因在于這個(gè)時(shí)候還沒(méi)有建立parent和child之間的關(guān)系,parent_id無(wú)法確定,如果在我們定義的child表中對parent_id不允許null,那程序執行將會(huì )出錯.對于這個(gè)問(wèn)題的解決,簡(jiǎn)單的辦法是將child表中的parent_id設置為允許null,但這不是一個(gè)好的設計,而且可能對系統的執行效率帶來(lái)影響.我們這里換種解決辦法,建立child到parent的多對一的連接,因而我們在child.hbm.xml中加上下面一句

<many-to-onename="parent"column="parent_id"not-null="true"/>

但需要注意,因為先前在child.hbm.xml中我們已經(jīng)定義了到字段parent_id的關(guān)聯(lián),因此要把前面對字段parent_id定義的關(guān)聯(lián)刪除,否側會(huì )造成重復定義,還有一點(diǎn),需要修改下parent.hbm.xml

<setname="children"inverse="true">

   <keycolumn="parent_id"/>

   <one-to-manyclass="Child"/>

</set>

這里增加inverse="true",因為系統缺省inverse="false",inverse="true"的作用是將parent變成被調用方,從而告訴系統不用去更改連接,連接由child來(lái)完成,下面是JAVA代碼實(shí)現

 Parent p=new Parent();

 Child c=newChild();

 c.setParent(p);

 p.getChileren().add(c);

 session.save(p);

 session.flush();

 

接下來(lái)我們談?wù)劧鄬Χ嗟年P(guān)系,這種關(guān)系用的不多,原因在于需要額外生成表來(lái)維護這種關(guān)系,并且會(huì )造成對對象的反復查詢(xún),這里我們以role和group為例,一個(gè)role可以對應多個(gè)group,而一個(gè)group也同樣對應多個(gè)role,我們在group.hbm.xml中加入下面的一段

<Set name=”roles” table=”t_group_role” inverse=”false” cascade=”save-update”>

<key column=”group_id”></key>

<many-to-many class=”Role” column=”role_id”/>

</Set>

其中t_group_role是group到role的映射表

我們這里將cascade設置為save-update,而不是all,因為對于delete操作,如果設置為all,這樣會(huì )在刪除group時(shí)候把group對應的role一樣刪除,這是我們不原意看到的,而設置為save-update不會(huì )有問(wèn)題,在delete操作時(shí)候,不但不會(huì )刪除role,同時(shí)由于設置了save-update而會(huì )更新t_group_role,刪除掉t_group_role 中和group相關(guān)記錄

相關(guān)的JAVA實(shí)現

Role role1=new Role();

Role role2=new Role();

Group group=new Group();

group.getRoles().add(role1);

group.getRoles().add(role2);

session.save(group);

session.flush();

 

對于Role.hbm.xml對groups采用類(lèi)似的定義,這里不在敘述


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
技術(shù)文檔 : Hibernate性能調優(yōu)
Hibernate表關(guān)系之一對多(inverse詳解)_IT技術(shù)搜索_開(kāi)源中國(Open
配置文件中inverse屬性對于父子關(guān)系維護的影響
hibernate中cascade和inverse
Hibernate之many
Hibernate映射解析——七種映射關(guān)系(九)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久