konhon

          忘掉過去,展望未來。找回自我,超越自我。
          逃避不一定躲的過, 面對不一定最難過, 孤單不一定不快樂, 得到不一定能長久, 失去不一定不再擁有, 可能因為某個理由而傷心難過, 但我卻能找個理由讓自己快樂.

          Google

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks
          Hibernate中的實體物件可以分為三種狀態:Transient、Persistent、Detached
          • Transient
          當您直接使用new創建出物件,例如在之前的例子中,User類別所衍生出之物件,在還沒有使用save()之前都是暫存物件,這些物件還沒有與資料庫發生任何的關係,不對應於資料庫中的任一筆資料。

          • Persistent
          當物件與資料庫中的資料有對應關係,並且與Session實例有關聯而Session 實例尚未關閉(close),則它是在Persistent狀態,具體而言,如果您將Transient狀態的物件使用Session的save()方法加以儲存,或是使用Hibernate從資料庫載入資料並封裝為物件(例如使用get()、load()),則該物件為Persistent狀態。

          Persistent狀態的物件對應於資料庫中的一筆資料,物件的id值與資料的主鍵值相同,並且Session實例尚未失效,在這期間您對物件的任何狀態變動,在Session實例關閉(close)或Transaction實例執行commit()之後,資料庫中對應的資料也會跟著更新。

          如果您將Session實例關閉(close),則Persistent狀態的物件會成為Detached狀態。

          如果您使用Session的實例delete()方法刪除資料,Persistent狀態的物件由於失去了對應的資料,則它會成為Transient狀態。
          • Detached
          Detached狀態的物件,其id與資料庫的主鍵值對應,但脫離Session實例的管理,例如在使用load()方法查詢到資料並封裝為物件之後,將Session實例關閉,則物件由Persistent狀態變為Detached狀態,Detached狀態的物件之任何屬性變動,不會對資料庫中的資料造成任何的影響。

          Detached狀態的物件可以使用update()方法使之與資料庫中的對應資料再度發生關聯,此時Detached狀態的物件會變為Persistent狀態。
          簡單的說,Transient與Detached狀態的物件未受Hibernate持久層管理員管理,對這兩個狀態的物件作任何屬性變動,不會對資料庫中的資料有任何的影響,而Persistent狀態的物件受Hibernate持久層管理,對物件的屬性變動,在Session實例關閉(close)或 Transaction實例執行commit()之後,資料庫中對應的資料也會跟著更新。

          Transient與Detached狀態的物件是非管理狀態,而Persistent狀態的物件是管理狀態,又稱為Persistent Object。

          在物件為Persistent時,如果物件的屬性發生變化,並且尚未提交之前,物件所攜帶的資料稱之為Dirty Data,Hibernate會在持久層維護物件的最近讀取版本,並在資料提交時檢查兩個版本的屬性是否有變化,如果有的話,則將資料庫中的資料進行更新。

          posted on 2005-08-10 22:11 konhon 優華 閱讀(343) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 齐齐哈尔市| 彭阳县| 阿克陶县| 泽州县| 澜沧| 嘉荫县| 沙田区| 南和县| 邹城市| 稻城县| 长岭县| 黎城县| 西城区| 得荣县| 长泰县| 临漳县| 武威市| 平湖市| 报价| 易门县| 磐石市| 同心县| 清原| 无棣县| 临潭县| 库车县| 蓬溪县| 兰坪| 四子王旗| 蒙城县| 南溪县| 尖扎县| 垣曲县| 娄烦县| 富阳市| 阿拉善左旗| 淮阳县| 鱼台县| 台北县| 石屏县| 正阳县|