<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0,  comments - 17,  trackbacks - 0
    來源:http://www.tianxiaboke.com/u/lyeerwy

    級聯(lián)保存和更新
    當(dāng)Hibernate持久化一個(gè)臨時(shí)對象時(shí),在默認(rèn)情下,他不會(huì)自動(dòng)持久化所關(guān)聯(lián)的其他臨時(shí)對象,如果希望當(dāng)持久化對象時(shí)把他所關(guān)聯(lián)的所有臨時(shí)對象進(jìn)行持久化的話:可以把 的cascade屬性設(shè)置為"save-update" ,cascade的默認(rèn)屬性值為none。
    cascade:設(shè)置操作對象時(shí)的級聯(lián)操作,即層級之間的連鎖操作
    值 save-update :表示當(dāng)保存和更新當(dāng)前對象(即insert和update語句時(shí)),會(huì)級聯(lián)保存和更新與他關(guān)聯(lián)的對象
    值 all :表示任何情況下都會(huì)進(jìn)行級聯(lián)操作,即對一個(gè)對象進(jìn)行操作,也會(huì)對和他關(guān)聯(lián)的其他對象進(jìn)行同樣的操作
    值 delete :表示在執(zhí)行delete時(shí),進(jìn)行級聯(lián)操作,刪除和他關(guān)聯(lián)的對象
    值 none :表示任何情況下,都不會(huì)進(jìn)行級聯(lián)操作
    <set>元素的inverse屬性

    在運(yùn)行上面的程序時(shí),如果hibernate的"show-sql"設(shè)置為true時(shí),就會(huì)看到Hibernate會(huì)生成很多sql語句,其實(shí)很多sql語句都是重復(fù)的
    eg: 
    insert into  test.order(o_name,c_id)values(?,?)
    insert into  test.order(o_name,c_id)values(?,?)
    insert into  test order   set c_id=? where id=?
    insert into  test order   set c_id=? where id=?

    為了解決這個(gè)問題,我們可以利用在<set>標(biāo)簽中加上inverse屬性。術(shù)語:inverse是指反轉(zhuǎn)的意思,在Hibernate中,表示關(guān)聯(lián)關(guān)系中的方向關(guān)聯(lián)關(guān)系中,inverse="false"的主控方,由主動(dòng)方負(fù)責(zé)維護(hù)對象關(guān)系我們 在customer對象的對象配置文件中加上

    <set name="orders"  cascade="save-update" inverse="true">
    <key  column="c_id" > </key>
    <one-to-many class="net.mbs.mypack.Order " />
    </set>

    聲明在Customer和Order的雙向關(guān)聯(lián)關(guān)系中,Customer端的關(guān)聯(lián)只是Order端關(guān)聯(lián)的鏡象(即Order端是主空端,負(fù)責(zé)維護(hù)Customer和order對象之間的關(guān)聯(lián)關(guān)系),當(dāng)hibernate探測到持久化對象Customer或Order的狀態(tài)發(fā)生變化時(shí)(主要是關(guān)聯(lián)關(guān)系的改變),僅按照Order對象的狀態(tài)的變化來同步更新數(shù)據(jù)庫。
    按次配置,如果在程序中,我們僅僅使用Customer.getOrder().add(order)(涉及了和Order的關(guān)聯(lián)關(guān)系的改變),是不能讓數(shù)據(jù)庫跟對象的變化來進(jìn)行數(shù)據(jù)庫同步更新的,只有利用Order對象的方法改變的Order對象狀態(tài)(eg:order.setCustomer(customer)----涉及到了和Customer的關(guān)聯(lián)關(guān)系的改變)時(shí),數(shù)據(jù)庫才會(huì)根據(jù)變化來同步更新數(shù)據(jù)庫,即只有主控方的狀態(tài)(涉及到了和另一方面的關(guān)聯(lián)關(guān)系的改變)發(fā)生了變化后,才會(huì)觸發(fā)對象和數(shù)據(jù)庫的同步更新。

    映射一對多雙向關(guān)聯(lián)關(guān)系
    當(dāng)類與類之間建立了關(guān)聯(lián),就可以方便的從一個(gè)對象導(dǎo)航到另一個(gè)對象或一組與他關(guān)聯(lián)的對象當(dāng)中,根據(jù)上面的程序,對于一個(gè)給定的Order對象,如果想獲取與他關(guān)聯(lián)的Customer對象,我們只需要調(diào)用入下方法:
    Customer c=order.geCustomer(); 那么當(dāng)我們得到一個(gè)Customer對象后,想查出和這個(gè)Customer對象關(guān)聯(lián)的所有Order對象時(shí),應(yīng)該怎么辦呢?由于在Customer中沒有建立對Order對象的關(guān)聯(lián),所以,不能通過加載Customer對象來自動(dòng)加載和他關(guān)聯(lián)的所有Order對象,唯一的方法只能通過JDBC或SQL語言人工寫出代碼來查詢數(shù)據(jù)庫Order表來返回所需要的信息
    上面的問題雖然解決,但不能算是最好,因?yàn)檫@樣性能會(huì)有所下降,對象位于內(nèi)存中,在內(nèi)存中從一個(gè)對象導(dǎo)航到另一個(gè)對象顯然比到數(shù)據(jù)庫中查詢數(shù)據(jù)要快得多

    具體實(shí)現(xiàn)<br>
    1:由于Customer和Order是一對多,即一個(gè)Customer要對應(yīng)多個(gè)Order,所以在Customer中應(yīng)該建立一個(gè)Set對象,用于存放和本Customer對象關(guān)聯(lián)的所有Order對象。
    2:在customer.hbm.xml通過<one-to-many>建立對Order表的關(guān)聯(lián)關(guān)系
    注意:<one-to-many>應(yīng)該放置在<set>標(biāo)簽中 
    我們先來看看Customer類的設(shè)計(jì)和customer.hbm.xml文件的內(nèi)容
    <br><br><br>------------------------------------------------------
    Customer Order 雙向一對多
    1:Customer類中建立一個(gè)容器對象,包含關(guān)聯(lián)的所有Order對象
    2:Order類中建立一個(gè)Customer對象,關(guān)聯(lián)Customer
    inverse="true"表示將維護(hù)關(guān)聯(lián)的權(quán)利交給引起Hibernate語句的生成

    customer.getOrders().add(order);
    customer.setName("dddddd");

    inverse="true"(設(shè)置此屬性的一方----是被控方)
    當(dāng)主控方修改對象之間的關(guān)聯(lián)關(guān)系時(shí),讓Hibernate生成sql語句

    posted on 2008-03-15 23:56 xyz 閱讀(8765) 評論(2)  編輯  收藏 所屬分類: 網(wǎng)絡(luò)文摘

    FeedBack:
    # re: Hibernate級聯(lián)保存和更新
    2008-03-15 23:57 | xyz
    但是為什么級聯(lián)插入數(shù)據(jù)庫后,沒有把外鍵也插入呢??  回復(fù)  更多評論
      
    # re: Hibernate級聯(lián)保存和更新[未登錄]
    2008-10-15 13:21 | x
    不咋地  回復(fù)  更多評論
      

    <2008年10月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    留言簿

    隨筆檔案(1)

    文章分類(44)

    文章檔案(46)

    收藏夾(1)

    Adobe

    AOP

    API

    appServer

    BI

    c

    • c-free
    • codeblocks
    • codelite
    • CodeLite IDE 是一個(gè)強(qiáng)大的開源,跨平臺的 C/C++整合開發(fā)環(huán)境. 支持包括 Windows、Linux 和 Mac 系統(tǒng)下運(yùn)行
    • codelite官網(wǎng)
    • dev-c++
    • Dev-C++是一個(gè)C&C++開發(fā)工具,它是一款自由軟件,遵守GPL協(xié)議。
    • GCC
    • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因?yàn)樗局荒芴幚?C語言。GCC 很快地?cái)U(kuò)展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。

    Cache

    CMS

    DB

    eclipse

    FreeMarker

    hibernate

    html5

    ibatis

    java

    jquery

    js

    json

    Linux

    Log

    mail server

    mobile

    mysql

    oauth

    openID

    other

    PHP

    portal

    report

    Scheduler

    schema

    Security

    SOA

    spring

    struts

    UI原型設(shè)計(jì)

    w3c

    Wap

    webservice

    xml

    供應(yīng)鏈管理

    博客鏈接

    好網(wǎng)站

    工作流

    開源網(wǎng)

    招聘

    插件下載

    操作系統(tǒng)

    構(gòu)建可伸縮的系統(tǒng)

    構(gòu)建工具

    測試

    • IETest
    • IE官網(wǎng)
    • OpenSTA
    • Siege
    • Siege是一個(gè)壓力測試和評測工具,設(shè)計(jì)用于WEB開發(fā)這評估應(yīng)用在壓力下的承受能力

    游戲

    源碼托管

    經(jīng)營

    資源

    金融/財(cái)務(wù)

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 日韩免费的视频在线观看香蕉| 亚洲最大黄色网址| 国产在线观看www鲁啊鲁免费| 巨胸喷奶水视频www网免费| 免费看的成人yellow视频| 成年性生交大片免费看| 午夜视频在线观看免费完整版| 成人最新午夜免费视频| 全免费a级毛片免费看不卡| 午夜一级免费视频| 国产精品免费视频网站| 免费在线观看黄网| 亚洲片国产一区一级在线观看 | 国产精品高清免费网站| 一本一道dvd在线观看免费视频| 污网站在线观看免费| 人禽伦免费交视频播放| 中文字幕av无码不卡免费| 成人A片产无码免费视频在线观看 成人电影在线免费观看 | 成人免费视频试看120秒| 日本不卡免费新一二三区| 国产乱弄免费视频| 久久久久亚洲AV无码专区网站| 亚洲AV无码久久精品成人| 亚洲福利视频一区二区三区| 亚洲中文字幕AV在天堂| 国产精品亚洲一区二区无码| 黄色网址免费在线观看| 99久久免费中文字幕精品| 青青青免费国产在线视频小草| 日韩在线免费看网站| 久久久久亚洲AV成人网人人网站 | 中文字幕亚洲乱码熟女一区二区| 亚洲国产精品成人精品无码区 | 亚洲欧洲国产视频| 亚洲av午夜电影在线观看 | 亚洲 欧洲 视频 伦小说| 国产成人综合亚洲| 国产在线一区二区综合免费视频 | a级毛片免费观看在线| 日韩免费观看一区|