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

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

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

    隨筆-7  評論-24  文章-102  trackbacks-0


    預備知識:出自:hibernate的各種保存方式的區別 (save,persis,update,saveOrUpdte,merge等)
    在所有之前,說明一下,對于hibernate,它的對象有三種狀態,transient、persistent、detached
        transient:瞬態或者自由態
        persistent:持久化狀態
        detached:脫管狀態或者游離態
    脫管狀態的實例可以通過調用save()、persist()或者saveOrUpdate()方法進行持久化。
    持久化實例可以通過調用 delete()變成脫管狀態。通過get()或load()方法得到的實例都是持久化狀態的。
    脫管狀態的實例可以通過調用 update()、0saveOrUpdate()、lock()或者replicate()進行持久化。

    save()和persist()將會引發SQL的INSERT,delete()會引發SQLDELETE,
    而update()或merge()會引發SQLUPDATE。對持久化(persistent)實例的修改在刷新提交的時候會被檢測到,
    它也會引起SQLUPDATE。saveOrUpdate()或者replicate()會引發SQLINSERT或者UPDATE


    [推薦] 解析eclipse下生成Hibernate DAO中的幾個方法出自: http://blog.csdn.net/xzknet/archive/2007/06/06/1641204.aspx
    void save(Usertable transientInstance)
         方法提供了向數據庫中添加數據的功能
    void delete(Usertable persistentInstance) 
         方法看名知意是用來刪除的.
    Usertable findById(java.lang.Integer id)
         方法實現了按ID查詢數據.
    List findByExample(Usertable instance) 
         方法實現的功能相當于"select * from Usertable"實現的功能就是查詢所有
    List findByProperty(String propertyName, Object value) 
         方法用來靈活的提供一種按條件查詢的方法,你可以自己定義要按什么樣的方式查詢.


    CodeDepts merge(CodeDepts detachedInstance) 
         將傳入的detached狀態的對象的屬性復制到持久化對象中,并返回該持久化對象。如果該session中沒有關聯的持久化對象,加載一個,如果傳入對象未保存,保存一個副本并作為持久對象返回,傳入對象依然保持detached狀態。
    void attachDirty(CodeDepts instance)
         將傳入的對象持久化并保存。如果對象未保存(Transient狀態),調用save方法保存。如果對象已保存(Detached狀態),調用update方法將對象與Session重新關聯。
    attachClean(CodeDepts instance)
         將傳入的對象狀態設置為Transient狀態。



    .merge(object)  合并、吞入hibernate的各種保存方式的區別 (save,persis,update,saveOrUpdte,merge等)
    如果session中存在相同持久化標識(identifier)的實例,用用戶給出的對象的狀態覆蓋舊有的持久實例
    如果session沒有相應的持久實例,則嘗試從數據庫中加載,或創建新的持久化實例,最后返回該持久實例
    用戶給出的這個對象沒有被關聯到session上,它依舊是脫管的
    重點是最后一句:
        當我們使用update的時候,執行完成后,我們提供的對象A的狀態變成持久化狀態。
        但當我們使用merge的時候,執行完成,我們提供的對象A還是脫管狀態,hibernate或者new了一個B,或者檢索到一個持久對象B,并把我們提供的對象A的所有的值拷貝到這個B,執行完成后B是持久狀態,而我們提供的A還是托管狀態


    NonUniqueObjectException問題的解決
    org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
    解決方法:
         使用 hibernate 3 的 merge 方法. session.merge(newDetail)即可,它會在 session 緩存中找到持久化對象,把新對象的屬性賦過去,再保存原session中的持久化對象。
         如果在session或數據庫中沒有的對象,用merge方法的話,它也能夠幫你把記錄 insert 到表中,相當于 save 方法。


     
    .findByExample(object)使用Spring封裝的Hibernate方法
    按照 object 所設置的屬性值來組合查詢語句的where條件,比如:
        Users anUser = new Users();
        anUser.setUserName("a");
        anUser.setPassWord("b"); 
                               =====> where username='a' and password='b'
        anUser.setRealName("");
                               =====> where username='a' and password='b' and realname=''
    posted on 2008-09-05 23:11 黃小二 閱讀(730) 評論(0)  編輯  收藏 所屬分類: S/S2SH
    主站蜘蛛池模板: 免费看美女让人桶尿口| 人妻无码久久一区二区三区免费| 在线天堂免费观看.WWW| 亚洲婷婷在线视频| 国产精品入口麻豆免费观看| 亚洲一区中文字幕在线观看| 国产精品免费观看| 亚洲人成无码网站在线观看| 色吊丝永久在线观看最新免费| 精品国产日韩久久亚洲| 日韩精品无码人妻免费视频| 亚洲av无码片vr一区二区三区 | av网站免费线看| 亚洲日韩VA无码中文字幕| 一级毛片大全免费播放| 亚洲中文字幕无码久久2017| 日韩精品免费在线视频| 亚洲另类古典武侠| 国产在线观看免费视频播放器| 一道本不卡免费视频| 亚洲狠狠婷婷综合久久久久| 99久久久国产精品免费牛牛四川 | 亚洲国产另类久久久精品| 99精品视频免费在线观看| 亚洲一卡2卡3卡4卡乱码 在线| 性做久久久久免费观看| 国产精品九九久久免费视频| 久久香蕉国产线看观看亚洲片| 三年片在线观看免费观看高清电影| 朝桐光亚洲专区在线中文字幕| 在线精品亚洲一区二区小说| **实干一级毛片aa免费| 亚洲JIZZJIZZ妇女| 亚洲AV无码专区国产乱码电影| 妻子5免费完整高清电视| 无码色偷偷亚洲国内自拍| 久久被窝电影亚洲爽爽爽| 妞干网免费视频在线观看| 成人免费777777被爆出| 亚洲第一男人天堂| 亚洲一区二区三区在线观看精品中文|