麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

[轉]Hibernate對象的三種狀態

2019-11-17 01:59:41
字體:
來源:轉載
供稿:網友

[轉]Hibernate對象的三種狀態

在Hibernate中,對象有三種狀態:臨 時狀態(Transient)、持久狀態(Persistent)和游離狀態(Detached)。

處于持久態的對象也稱為 PO(PersistenceObject),臨時對象和游離對象也稱為VO(ValueObject).1. 臨時狀態由 new命令開辟內存空間的java對象,例如:

User user=new User();

臨時對象在內存孤立存在,它是攜帶信息的載體,不和數據庫的數據有任何關聯關系.

(a)如 果沒有變量對該對象進行引用,它將被gc回收;

(b)在Hibernate中,可通過 session的save()或saveOrUpdate()方法將瞬時對象與數據庫相關聯,并將數據對應的插入數據庫中,此時該臨時對象轉變成持久化對 象.

2. 持久狀態處于該狀態的對象在數據庫中具有對應的記錄,并擁有一個持久化標識.通過session的get()、load() 等方法獲得的對象都是持久對象。

持久化對象被修改變更后,不會馬上同步到數據庫,直到數據庫事務提交。在同步之前,持久化 對象是臟的(Dirty)。

(a)如果是用hibernate的delete()方法,對應的持久對象就變成臨時對象,因數據庫中 的對應數據已被刪除,該對象不再與數據庫的記錄關聯.

(b)當一個session執行close()或 clear()、evict()之后,持久對象變成游離對象,此時該對象雖然具有數據庫識別值,但它已不在HIbernate持久層的管理之下.

持久對象具有如下特點:

(1)和session實例關聯;

(2)在數據庫中有與之關聯的記錄,并 擁有持久化標識.

3. 游離狀態當與某持久對象關聯的session被關閉后,該持久對象轉變為游離對象.當游離對象被重新關聯到session上 時,又再次轉變成持久對象(在Detached其間的改動將被持久化到數據庫中)。游離對象擁有數據庫的識別值,但已不在持久化管理范圍之內。

(a)通 過update()、saveOrUpdate()等方法,游離對象可轉變成持久對象.

(b)如果是用hibernate的delete()方法,對應的游離對象就變成臨時對象,因數據庫中的 對應數據已被刪除,該對象不再與數據庫的記錄關聯.

(c)在沒有任何變量引用它時,它將被gc在適當的 時候回收;

游離對象具有如下特點:

(1)本質上與瞬時對象相同,在沒有任何變量引用它時,JVM會在適當的時候將它回收;

(2)比瞬時對象多了一個數據庫記錄標識值.

示例:

Session session=factory.openSession();User user=new User();//user對象處于臨時狀態。user.setName("張三");user.setAge(18);Transaction tran=Session.beginTransaction();session.save(user);//user對象轉化為持 久狀態。tran.commit();session.close();//user對象轉化為游離狀態。user.setName(" 李四");Session session2=factory.openSession();Transaction tran2=Session2.beginTransaction();Session2.update(user);//user對象 轉化為持久狀態。tran2.commit();(游離狀態中對象的變動在再次持久時會被持久化到數據庫)Transaction tran3=Session.beginTransaction();Session2.delete(user);//user對象轉 化為臨時狀態。tran3.commit();session2.close();Session的不同操作對對象狀態的影響:Session 的save()方法save()方法將一個臨時對象轉變為持久對象。Session的update()方法update()方法 將一個游離對象轉變為持久對象。Session的lock()方法調用lock()方法將對象同Session相關聯而不強制更新。Session 的merge()方法拷貝指定對象的狀態到具有相同對象標識符的持久對象。Session的saveOrUpdate()方法saveOrUpdate() 方法對于臨時對象,執行save()方法,對于游離對象,執行update()方法。Session的load()和get()方法load() 方法和get()方法都可以根據對象的標識符加載對象,這兩個方法加載的對象都位于Session的緩存中,屬于持久對象。Session的 delete()方法delete()方法用于從數據庫中刪除與持久化對象對應的記錄。如果傳入的是一個持久化對象,Session就執行一條 delete語句。如果傳入的參數是游離對象,先使分離對象與Session關聯,使它變為持久化對象,然后才計劃執行一個delete語句。Session 的evict()方法evict()方法從Session的緩存中刪除一個持久對象。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品国产一区二区久久 | 黄污污网站 | 久久不雅视频 | 成人免费网站在线观看视频 | 欧美成人一区二区三区电影 | 欧美在线观看视频一区二区 | 亚洲视频观看 | 国产精品一品二区三区四区18 | 美国一级免费视频 | 韩国三级日本三级香港三级黄 | 精品国产中文字幕 | 激情黄页| 黑人日比 | 欧美精品欧美极品欧美激情 | 羞羞草视频 | 91麻豆蜜桃一区二区三区 | 欧美大荫蒂xxx | 精品一区二区三区中文字幕 | 久久综合婷婷香五月 | 日日艹夜夜艹 | 一级毛片特黄 | 国产午夜亚洲精品午夜鲁丝片 | 99久久婷婷国产综合精品青牛牛 | 日本免费不卡一区二区 | 亚洲视频高清 | 今井夏帆av一区二区 | 国产精品一区2区3区 | 亚洲一级成人 | 国产精品久久久久久婷婷天堂 | 精品国产一区二区亚洲人成毛片 | 91精品国产99久久久久久红楼 | 欧美亚洲国产一区二区三区 | 久久色伦理资源站 | www.99av | 久久国产精品91 | 今井夏帆av一区二区 | 99精品在线观看 | 91短视频在线视频 | www.精品视频 | 操你啦免费视频 | 日本成人在线免费 |