国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
配置文件中inverse屬性對(duì)于父子關(guān)系維護(hù)的影響
配置文件中inverse屬性對(duì)于父子關(guān)系維護(hù)的影響
2009-06-02 16:50

hibernate的model配置文件如下:
        <property name="name" type="string">
            <column name="NAME" length="12" />
        </property>      
        <set name="childs" inverse="true" cascade="all" lazy="false">
            <key>
                <column name="PARENT_ID" length="10" />
            </key>
            <one-to-many class="com.max.Child" />
        </set>
其中的inverse="true"表示 ParentPO 本身不維護(hù)表之間的關(guān)系,而由相反的一方 child來維護(hù), CASCADE=“ALL”表示 無論是update,insert ,delete 都保持級(jí)連關(guān)系
lazy="true"表示初始化父親的時(shí)候不會(huì)把所有的兒子都從數(shù)據(jù)庫(kù)中l(wèi)oad進(jìn)來。

首先講講inverse=true作用: 這里關(guān)系是由兒子維護(hù)的,所以如果只是往父親里加入兒子,不給兒子設(shè)置父親的話session.save(parent),就不會(huì)保存兒子! 看這個(gè)例子:

  1.                 ChildPO child = new ChildPO();,
  2.                  ITxMgr tx = null;   
  3.                  tx = HibernateTxMgr.beginTrans("Add a new relationships...");;   
  4.                  session = (Session); tx.getSession();;   
  5.                  parent = new ParentPO();;   
  6.                  ChildPO child = new ChildPO();;   
  7.                  ChildPO child2 = new ChildPO();;   
  8.                  List list = new ArrayList();;   
  9.                  list.add(child);;   
  10.                  list.add(child2);;   
  11.                  parent.setChildren(list);;   
  12.                  session.save(parent);;   
  13.                  session.flush();;   
  14.                  System.out.println("dddddddddddddddddddddddddddddddddddddddddddddddddddddd"); ;   
  15.                  ChildPO child3 = new ChildPO();;   
  16.                  child3.setParent(parent);;   
  17.                  session.save(child3);;   
  18.                  session.flush();;   
  19.                  System.out.println("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); ;   
  20.                  tx.endTrans();;   
生成的SQL沒有變

Java代碼
  1. Hibernate: insert into PARENT (ID); values (default);   
  2.   
  3. Hibernate: insert into CHILD (PARENTID, ID); values (?, default);   
  4.   
  5. Hibernate: insert into CHILD (PARENTID, ID); values (?, default);   
  6.   
  7. dddddddddddddddddddddddddddddddddddddddddddddddddddddd   
  8. Hibernate: insert into CHILD (PARENTID, ID); values (?, default);   
  9. eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee   
數(shù)據(jù)庫(kù)中數(shù)據(jù)如下:(注意父子關(guān)系丟失了)
    ID           PARENTID   
  1. ----------- -----------   
  2.          74            -   
  3.          75            -   
  4.          76          45   
  5. C:\Myapp\SQLLIB\BIN>db2 select * from parent   
  6.   
  7. ID   
  8. -----------   
  9.          45   

為什么最后一個(gè)孩子的父親沒有丟失呢? 就在于child3.setParent(parent),因?yàn)殛P(guān)系是由孩子維護(hù)的,如果child不setParent,或者 new childPO(父親)的話 父子關(guān)系就丟失了,parent.setChildren(list)是沒有用的!

之所以用inverse=true是為了提高系統(tǒng)的性能,在沒有設(shè)置inverse=true的情況下同樣調(diào)用上面的代碼則生成的sql如下:

  1. Hibernate: insert into CHILD (PARENTID, ID); values (?, default);   
  2.   
  3. Hibernate: insert into CHILD (PARENTID, ID); values (?, default);   
  4.   
  5. Hibernate: update CHILD set PARENTID=? where ID=?   
  6. dddddddddddddddddddddddddddddddddddddddddddddddddddddd   
  7. Hibernate: insert into CHILD (PARENTID, ID); values (?, default);   
  8. Hibernate: values IDENTITY_VAL_LOCAL();   

    此時(shí)系統(tǒng)明顯比原來多了一句Hibernate: update CHILD set PARENTID=? where ID=?針對(duì)每一個(gè)孩子都去更新父親的id明顯速度很慢,因?yàn)楦赣H有個(gè)孩子的集合,他無法知道哪個(gè)孩子的父親id已經(jīng)指向自己了,所以對(duì)于每一個(gè)孩子,都要更新父親id,而這個(gè)關(guān)系由孩子維護(hù)就好多了,每個(gè)孩子只有一個(gè)父親,只有設(shè)置過的才需要更新,所以顯然,這個(gè)父子關(guān)系由孩子來維護(hù)比較省力.減輕了數(shù)據(jù)庫(kù)的負(fù)擔(dān)。

在沒有 inverse=true 的情況下,父子兩邊都維護(hù)父子關(guān)系所以 只要有 parent.setchildren(),或者 child.setparent()兩者之一就可以了

對(duì)inverse=true的總結(jié):不用inverse=ture,對(duì)開發(fā)者來說寫代碼比較方便,但是程序執(zhí)行的效率比較低下,,用inverse=ture一定要注意,一定要對(duì)維護(hù)關(guān)系的一方進(jìn)行調(diào)用,否則會(huì)有意想不到的破壞力。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Hibernate的父子關(guān)系和多對(duì)多的關(guān)系
技術(shù)文檔 : Hibernate性能調(diào)優(yōu)
Hibernat性能優(yōu)化
Hibernate表關(guān)系之一對(duì)多(inverse詳解)_IT技術(shù)搜索_開源中國(guó)(Open
hibernate中cascade和inverse
Hibernate配置文件在單元測(cè)試中的靈活運(yùn)用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服