<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
    主站蜘蛛池模板: 在线观看亚洲免费| 亚洲一区无码中文字幕| 午夜免费国产体验区免费的| 亚洲午夜国产精品无码| 2021免费日韩视频网| 男女交性无遮挡免费视频| 91亚洲va在线天线va天堂va国产 | 一级片在线免费看| 亚洲日本中文字幕| 日日AV拍夜夜添久久免费| 一级毛片免费视频| 老司机亚洲精品影院在线观看| 亚洲高清国产拍精品26U| 精品国产一区二区三区免费看| 在线观看免费无码视频| 亚洲色大成网站www久久九| 国产国拍亚洲精品mv在线观看 | 亚洲AV无码一区二三区 | 国产片AV片永久免费观看| 一级午夜免费视频| 日韩亚洲不卡在线视频中文字幕在线观看 | 亚洲一区二区三区在线| 亚洲人成人网站在线观看| 免费A级毛片无码无遮挡内射| 一级毛片大全免费播放下载 | 日本免费一区二区三区 | 曰批全过程免费视频观看免费软件| 久久久久亚洲AV成人片| 2048亚洲精品国产| 日本牲交大片免费观看| 亚洲电影免费观看| 爽爽爽爽爽爽爽成人免费观看| 久久精品国产亚洲AV天海翼| 亚洲国产成人91精品| 久久精品视频亚洲| 亚洲人成人网站在线观看| 国产精品无码免费视频二三区| 麻豆视频免费播放| 91精品国产免费| 日本道免费精品一区二区| 一级特黄a大片免费|