<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

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

    在運行上面的程序時,如果hibernate的"show-sql"設置為true時,就會看到Hibernate會生成很多sql語句,其實很多sql語句都是重復的
    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=?

    為了解決這個問題,我們可以利用在<set>標簽中加上inverse屬性。術語:inverse是指反轉的意思,在Hibernate中,表示關聯關系中的方向關聯關系中,inverse="false"的主控方,由主動方負責維護對象關系我們 在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的雙向關聯關系中,Customer端的關聯只是Order端關聯的鏡象(即Order端是主空端,負責維護Customer和order對象之間的關聯關系),當hibernate探測到持久化對象Customer或Order的狀態發生變化時(主要是關聯關系的改變),僅按照Order對象的狀態的變化來同步更新數據庫。
    按次配置,如果在程序中,我們僅僅使用Customer.getOrder().add(order)(涉及了和Order的關聯關系的改變),是不能讓數據庫跟對象的變化來進行數據庫同步更新的,只有利用Order對象的方法改變的Order對象狀態(eg:order.setCustomer(customer)----涉及到了和Customer的關聯關系的改變)時,數據庫才會根據變化來同步更新數據庫,即只有主控方的狀態(涉及到了和另一方面的關聯關系的改變)發生了變化后,才會觸發對象和數據庫的同步更新。

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

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

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

    inverse="true"(設置此屬性的一方----是被控方)
    當主控方修改對象之間的關聯關系時,讓Hibernate生成sql語句

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

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

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

    留言簿

    隨筆檔案(1)

    文章分類(44)

    文章檔案(46)

    收藏夾(1)

    Adobe

    AOP

    API

    appServer

    BI

    c

    • c-free
    • codeblocks
    • codelite
    • CodeLite IDE 是一個強大的開源,跨平臺的 C/C++整合開發環境. 支持包括 Windows、Linux 和 Mac 系統下運行
    • codelite官網
    • dev-c++
    • Dev-C++是一個C&C++開發工具,它是一款自由軟件,遵守GPL協議。
    • GCC
    • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 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原型設計

    w3c

    Wap

    webservice

    xml

    供應鏈管理

    博客鏈接

    好網站

    工作流

    開源網

    招聘

    插件下載

    操作系統

    構建可伸縮的系統

    構建工具

    測試

    • IETest
    • IE官網
    • OpenSTA
    • Siege
    • Siege是一個壓力測試和評測工具,設計用于WEB開發這評估應用在壓力下的承受能力

    游戲

    源碼托管

    經營

    資源

    金融/財務

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 亚洲校园春色小说| 中文字幕亚洲男人的天堂网络| 最近免费中文字幕MV在线视频3| 亚洲AV无码国产精品色午友在线| 97青青草原国产免费观看| 亚洲综合色7777情网站777| 国产在线不卡免费播放| 成人网站免费看黄A站视频| 亚洲一区二区三区免费视频| 在线a亚洲v天堂网2018| 香蕉免费一区二区三区| 色天使色婷婷在线影院亚洲 | 亚洲JIZZJIZZ中国少妇中文| 日韩精品无码免费专区午夜 | 丁香花免费完整高清观看| 国产精品亚洲а∨天堂2021| 亚洲AV无码久久| 天天看片天天爽_免费播放| 伊人免费在线观看| 亚洲爆乳AAA无码专区| 亚洲国产成人片在线观看无码| 性感美女视频在线观看免费精品| 久久国产精品免费一区二区三区| 亚洲色欲色欲www| 亚洲最大AV网站在线观看| 中文字幕人成无码免费视频| 国产午夜无码片免费| 亚洲AV无码资源在线观看| 久久久久亚洲AV无码永不| 亚洲真人日本在线| 暖暖日本免费在线视频| 亚欧免费一级毛片| WWW国产成人免费观看视频| 伊人久久五月丁香综合中文亚洲| 亚洲AV无码码潮喷在线观看| 免费人成网站在线高清| 好男人视频在线观看免费看片| 久久九九AV免费精品| jzzjzz免费观看大片免费| 亚洲AV综合色区无码一二三区| 亚洲精品韩国美女在线|