posts - 167,  comments - 30,  trackbacks - 0
          在Hibernate中,對象有三種狀態:臨時狀態、持久狀態和游離狀態。

                臨時狀態:當new一個實體對象后,這個對象處于臨時狀態,即這個對象只是一個保存臨時數據的內存區域,如果沒有變量引用這個對象,則會被jre垃圾回收機制回收。這個對象所保存的數據與數據庫沒有任何關系,除非通過Session的save或者SaveOrUpdate把臨時對象與數據庫關聯,并把數據插入或者更新到數據庫,這個對象才轉換為持久對象。 
                  例如:Emp e=new Emp();    //創建臨時對象 
                          e.setEmpno((long) 8888); 
                          e.setEName("mike"); 
                          ... 
                          EmpDAO d=new EmpDAO(); 
                          d.save(e);//持久化 
                           ...


                 持久狀態: 持久化對象的實例在數據庫中有對應的記錄,并擁有一個持久化表示(ID)。對持久化對象進行delete操作后,數據庫中對應的記錄將被刪除,那么持久化對象與數據庫記錄不再存在對應關系,持久化對象變成臨時狀態。 
                  持久化對象被修改變更后,不會馬上同步到數據庫,直到數據庫事務提交。在同步之前,持久化對象是臟的(Dirty)。
                      例如: 
                        Emp e=new Emp(); //創建了臨時的對象 
                         EmpDAO edao= new empDAO(); 
                         e=edao.findbyEmpno((long) 7786);    //使對象與數據庫記錄對應,從而持久化 
                         e.setEname("新的名字");                     //修改了持久化對象,使之處于 Dirty 
                         ...... 
                         edao.saveorupdate(e);                      //保存,但是仍然 Dirty 
                         tran.commit();                             //提交,實現與數據庫同步,不再Dirty 
                         ......

           

                 游離狀態:當Session進行了Close、Clear或者evict后,持久化對象雖然擁有持久化標識符和與數據庫對應記錄一致的值,但是因為會話已經消失,對象不在持久化管理之內,所以處于游離狀態(也叫:脫管狀態)。游離狀態的對象與臨時狀態對象是十分相似的,只是它還含有持久化標識。

                    其中,持久化狀態的對象,簡稱為:PO 
                    而臨時狀態和游離狀態的對象,簡稱為:VO


                    1、通過get()或load()方法得到的實例都是持久化狀態的。 
                    2、當把session關閉時,session緩存中的持久化對象也變成游離態

                       因關閉session而變成游離態的可以通過lock、save、update變成持久態 
                    3、持久態實例可以通過調用delete()變成游離態 
                       而游離狀態的實例可以通過調用lock()或者replicate()進行持久化 
                    4、save()和persist()將會引發SQL的insert,delete()會引發SQL的delete 
                       update()或merge()會引發SQL的update,對持久化實例的修改在刷新提交的時候會

                       被檢測到, 它會引發SQL的update 
                        saveOrUpdate()或者replicate ()會引發SQL的insert或者update

          posted on 2010-08-16 09:59 David1228 閱讀(337) 評論(0)  編輯  收藏 所屬分類: Hibernate/ibatis

          <2010年8月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章檔案

          新聞分類

          新聞檔案

          相冊

          收藏夾

          Java

          Linux知識相關

          Spring相關

          云計算/Linux/虛擬化技術/

          友情博客

          多線程并發編程

          開源技術

          持久層技術相關

          搜索

          •  

          積分與排名

          • 積分 - 359875
          • 排名 - 154

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 淄博市| 大英县| 沐川县| 瓦房店市| 莱州市| 牡丹江市| 会宁县| 黎川县| 宁津县| 错那县| 石楼县| 阜宁县| 漯河市| 卫辉市| 湘潭县| 东莞市| 大悟县| 武夷山市| 绍兴市| 东港市| 芜湖县| 密山市| 普陀区| 竹北市| 新龙县| 洮南市| 邢台市| 枝江市| 闸北区| 罗甸县| 上杭县| 陕西省| 闽清县| 林周县| 鄄城县| 延长县| 西城区| 建宁县| 万载县| 龙山县| 九寨沟县|