<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
    不咋地  回復  更多評論
      

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿

    隨筆檔案(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開發這評估應用在壓力下的承受能力

    游戲

    源碼托管

    經營

    資源

    金融/財務

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 黄色免费在线网址| 亚洲 综合 国产 欧洲 丝袜 | 国产福利视精品永久免费 | 亚洲AV网站在线观看| 日本亚洲免费无线码| 国产精品视频白浆免费视频| 黄色大片免费网站| 日本亚洲欧美色视频在线播放 | 国产精品永久免费10000| 日韩精品无码免费专区午夜不卡| 亚洲heyzo专区无码综合| 亚洲综合av一区二区三区| 亚洲精品高清国产麻豆专区| 久久精品亚洲日本佐佐木明希| 不卡精品国产_亚洲人成在线| 四虎免费久久影院| 国产精品自在自线免费观看| 成人男女网18免费视频| 精品久久久久国产免费| 国产精品成人免费视频网站京东| 最近新韩国日本免费观看| 亚洲一区二区在线免费观看| 久久久精品免费国产四虎| 黄色免费在线网站| 好久久免费视频高清| 小草在线看片免费人成视久网| 青青操视频在线免费观看| 中国性猛交xxxxx免费看| 丁香花在线视频观看免费| 国产午夜无码精品免费看动漫| 国产自国产自愉自愉免费24区| 久久99精品免费一区二区| 精品熟女少妇aⅴ免费久久 | 久久精品国产亚洲av成人| 亚洲av日韩av不卡在线观看| 亚洲AV美女一区二区三区| 91在线精品亚洲一区二区| 亚洲精品美女久久久久| 亚洲av一本岛在线播放| 亚洲乱理伦片在线观看中字| jizzjizz亚洲日本少妇|