<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 黃小二 閱讀(738) 評論(0)  編輯  收藏 所屬分類: S/S2SH
    主站蜘蛛池模板: 亚洲成人免费网站| 国产亚洲成av人片在线观看| 亚洲av无码片区一区二区三区| 99免费在线观看视频| 日韩亚洲Av人人夜夜澡人人爽| 午夜免费福利片观看| 亚洲综合久久久久久中文字幕| 免费看h片的网站| 亚洲影视自拍揄拍愉拍| 国产在线a免费观看| 亚洲Av永久无码精品黑人| 日本一线a视频免费观看| 免费大片av手机看片| 亚洲国产成人久久精品99| 永久免费无码网站在线观看个| 久久国产成人精品国产成人亚洲| 亚欧乱色国产精品免费视频| 亚洲日产无码中文字幕| 亚洲国产精品免费视频| 亚洲国产片在线观看| 成人午夜视频免费| 国产精品久久久久久亚洲影视| 亚洲午夜精品久久久久久浪潮| 中国精品一级毛片免费播放| 亚洲一区二区三区四区在线观看| 性短视频在线观看免费不卡流畅| 亚洲女子高潮不断爆白浆| 亚洲国产婷婷综合在线精品| 日韩精品无码免费专区午夜| 亚洲国产高清美女在线观看| 超pen个人视频国产免费观看 | 亚洲人成无码网站| 99视频精品全部免费观看| 久久久久亚洲国产| 亚洲熟女乱综合一区二区| 久久国产精品免费网站| 亚洲熟妇无码一区二区三区导航| 亚洲人成人无码网www电影首页| 亚洲一级毛片免费在线观看| 野花视频在线官网免费1| 亚洲av福利无码无一区二区|