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

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

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

    隨筆-7  評(píng)論-24  文章-102  trackbacks-0


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

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


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


    CodeDepts merge(CodeDepts detachedInstance) 
         將傳入的detached狀態(tài)的對(duì)象的屬性復(fù)制到持久化對(duì)象中,并返回該持久化對(duì)象。如果該session中沒(méi)有關(guān)聯(lián)的持久化對(duì)象,加載一個(gè),如果傳入對(duì)象未保存,保存一個(gè)副本并作為持久對(duì)象返回,傳入對(duì)象依然保持detached狀態(tài)。
    void attachDirty(CodeDepts instance)
         將傳入的對(duì)象持久化并保存。如果對(duì)象未保存(Transient狀態(tài)),調(diào)用save方法保存。如果對(duì)象已保存(Detached狀態(tài)),調(diào)用update方法將對(duì)象與Session重新關(guān)聯(lián)。
    attachClean(CodeDepts instance)
         將傳入的對(duì)象狀態(tài)設(shè)置為Transient狀態(tài)。



    .merge(object)  合并、吞入hibernate的各種保存方式的區(qū)別 (save,persis,update,saveOrUpdte,merge等)
    如果session中存在相同持久化標(biāo)識(shí)(identifier)的實(shí)例,用用戶給出的對(duì)象的狀態(tài)覆蓋舊有的持久實(shí)例
    如果session沒(méi)有相應(yīng)的持久實(shí)例,則嘗試從數(shù)據(jù)庫(kù)中加載,或創(chuàng)建新的持久化實(shí)例,最后返回該持久實(shí)例
    用戶給出的這個(gè)對(duì)象沒(méi)有被關(guān)聯(lián)到session上,它依舊是脫管的
    重點(diǎn)是最后一句:
        當(dāng)我們使用update的時(shí)候,執(zhí)行完成后,我們提供的對(duì)象A的狀態(tài)變成持久化狀態(tài)。
        但當(dāng)我們使用merge的時(shí)候,執(zhí)行完成,我們提供的對(duì)象A還是脫管狀態(tài),hibernate或者new了一個(gè)B,或者檢索到一個(gè)持久對(duì)象B,并把我們提供的對(duì)象A的所有的值拷貝到這個(gè)B,執(zhí)行完成后B是持久狀態(tài),而我們提供的A還是托管狀態(tài)


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


     
    .findByExample(object)使用Spring封裝的Hibernate方法
    按照 object 所設(shè)置的屬性值來(lái)組合查詢語(yǔ)句的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) 評(píng)論(0)  編輯  收藏 所屬分類: S/S2SH
    主站蜘蛛池模板: 亚洲国产精品一区| 亚洲精品自在在线观看| 亚洲精品午夜久久久伊人| 国内精品免费视频精选在线观看 | 在线永久看片免费的视频| 亚洲av激情无码专区在线播放| 色www永久免费网站| 国产亚洲无线码一区二区 | 亚洲免费视频网站| 久久精品视频亚洲| 一区二区三区观看免费中文视频在线播放| 亚洲中文字幕无码爆乳av中文| 另类图片亚洲校园小说区| 日本免费一区二区三区最新| 亚洲欧洲无卡二区视頻| 男女交性永久免费视频播放| 偷自拍亚洲视频在线观看99| 亚洲国模精品一区| 久久成人18免费网站| 亚洲AV无码成人精品区天堂| 91制片厂制作传媒免费版樱花| 亚洲国产日韩女人aaaaaa毛片在线 | 亚洲av色香蕉一区二区三区 | 59pao成国产成视频永久免费| 亚洲成a人片在线观看中文app| 成全高清视频免费观看| 国产亚洲精品美女久久久久 | 亚洲狠狠狠一区二区三区| 永久免费av无码网站韩国毛片| 亚洲AV无码专区在线观看成人| 免费在线观看毛片| 久久免费的精品国产V∧| 亚洲乱码一二三四区乱码| 免费**毛片在线播放直播| 在线观看片免费人成视频播放| 亚洲色欲或者高潮影院| 免费人成视频在线观看视频| 久久久国产精品福利免费| 国产日本亚洲一区二区三区| 亚洲色欲久久久久综合网| 5555在线播放免费播放|