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

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

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

    碰到的一個Hibernate的問題

    也不知道算不算問題,只是感覺有那么一點奇怪...
    在OSIV情況下編寫的一個測試類,其中的代碼是這樣的:
    1Test test=new Test();
    2dao.save(test);
    3Test testChild=new Test();
    4testChild.setParent(test);
    5dao.save(testChild);
    6Test resultTest=(Test)dao.getById(Test.class, test.getId());
    Test本身是個自關聯,映射文件如下:
    <class
           
    name="dataset.component.metadata.display.Test"
           table
    ="T_Test"
           dynamic-update
    ="true"
       
    >

           
    <id
               
    name="id"
               column
    ="id"
               type
    ="int"
           
    >
               
    <generator class="native">
               
    </generator>
           
    </id>

           
    <set
               
    name="childs"
               table
    ="T_Test"
               lazy
    ="true"
               cascade
    ="delete"
               sort
    ="unsorted"
           
    >

               
    <key
                   
    column="parentId"
               
    >
               
    </key>

               
    <one-to-many
                     
    class="dataset.component.metadata.display.Test"
               
    />

           
    </set>

           
    <many-to-one
               
    name="parent"
               class
    ="dataset.component.metadata.display.Test"
               cascade
    ="none"
               outer-join
    ="auto"
               update
    ="true"
               insert
    ="true"
               column
    ="parentId"
           
    />

       
    </class>

    因為是open session in view,所以session是在代碼執行完畢后關閉的;
    在這種情況下執行resultTest.getChilds()返回的是null。
    調試的時候dao.getById執行完畢后取回的resultTest和之前的test是同一個對象,hashcode都是一樣的..
    于是便嘗試在dao.getById之前把session關閉,這個時候再執行發現resultTest.getChilds()就是正確的了..
    總結,就是在同一個session內如果save了一個對象,再通過session.load的方式去取這個對象取出的將仍然是當前session中的對象,也就是說不會去數據庫中重新獲取...
    怎么感覺這樣是不太對的,明明數據庫有改變,卻沒有去重新的加載...
    但因為open session in view是這么做的,所以現在干脆測試的時候就使用另外一個dao了,唯一的不同就是這個dao會即時的關閉session,大家有沒有別的什么好建議,^_^

    posted on 2006-02-24 20:05 BlueDavy 閱讀(1710) 評論(6)  編輯  收藏 所屬分類: Java

    評論

    # re: 碰到的一個Hibernate的問題 2006-02-24 20:56 Vincent Thinking

    ^_^,因為Session本身一級緩存,由于OSIV取的同一個session,所以是同一個對象。save(test)后,test已經從pojo轉變為po,任何po的改動都會同步到數據庫,但是代碼中僅僅是testChild.setParent(test),而沒有test.addChild(testChild),所以僅僅是testChild發生了變化,test沒有任何改動,session中仍然保存的是以前的test。重新開一個session會讀取會得到帶有child的test,或者用get()方法。  回復  更多評論   

    # re: 碰到的一個Hibernate的問題 2006-02-26 10:07 Asktalk

    看一下它,對你有幫助,http://m.tkk7.com/asktalk/archive/2006/01/18/28548.html  回復  更多評論   

    # re: 碰到的一個Hibernate的問題 2006-02-26 16:45 BlueDavy

    恩,多謝asktalk,^_^  回復  更多評論   

    # re: 碰到的一個Hibernate的問題 2006-02-28 08:20 aycl

    在 dao.getById(..) 前叫: session.clear() 或 session.evict(test). 可清理一級緩存, 迫 hibernate 重新讀取.


      回復  更多評論   

    # re: 碰到的一個Hibernate的問題 2006-02-28 09:27 BlueDavy

    恩,已經這么做了,多謝,^_^  回復  更多評論   

    # re: 碰到的一個Hibernate的問題 2006-03-10 13:47 Tin

    可以用session.refresh()進行強行讀取就OK了。
    我么項目的Category也是自影射,修改完以后child就沒有了。只要refresh一下就OK了。  回復  更多評論   

    公告

     









    feedsky
    抓蝦
    google reader
    鮮果

    導航

    <2006年2月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627281234
    567891011

    統計

    隨筆分類

    隨筆檔案

    文章檔案

    Blogger's

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩激情无码免费毛片| 在线永久免费的视频草莓| 国产又大又黑又粗免费视频| 色老板亚洲视频免在线观| 日韩免费精品视频| 亚洲制服丝袜第一页| 欧美日韩国产免费一区二区三区| 亚洲三级高清免费| 成人免费午夜视频| 国产成人va亚洲电影| 免费在线观看视频a| eeuss免费影院| 国产V亚洲V天堂A无码| 久久99精品国产免费观看| 亚洲美女视频免费| 无人在线观看免费高清视频| 亚洲gay片在线gv网站| 亚洲精品成人片在线观看| 国产色无码精品视频免费| 亚洲高清美女一区二区三区| 97无码免费人妻超级碰碰碰碰| 亚洲第一成年网站视频| 久久亚洲国产精品123区| 午夜影院免费观看| 亚洲色精品VR一区区三区| 免费一级做a爰片性色毛片| 国产午夜成人免费看片无遮挡 | 日本免费高清视频| 亚洲人成免费电影| 国产zzjjzzjj视频全免费| 国产黄色免费观看| 亚洲导航深夜福利| 免费A级毛片无码A| 精品视频一区二区三区免费| 亚洲无吗在线视频| 国产成人A亚洲精V品无码| 1000部国产成人免费视频| 亚洲aⅴ无码专区在线观看| 亚洲精品tv久久久久久久久 | 免费一级毛片在线观看 | 色婷婷7777免费视频在线观看|