日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Hibernate三態(tài),游離態(tài)

 曾今最強 2011-03-23

Hibernate三態(tài),游離態(tài)

Hibernate對象狀態(tài)
臨時(Transient) - 由new操作符創(chuàng)建,且尚未與Hibernate Session 關聯(lián)的對象被認定為臨時(Transient)的。臨時(Transient)對象不會被持久化到數(shù)據(jù)庫中,也不會被賦予持久化標識(identifier)。 如果臨時(Transient)對象在程序中沒有被引用,它會被垃圾回收器(garbage collector)銷毀。 使用Hibernate Session可以將其變?yōu)槌志?Persistent)狀態(tài)。(Hibernate會自動執(zhí)行必要的SQL語句)

持久(Persistent) - 持久(Persistent)的實例在數(shù)據(jù)庫中有對應的記錄,并擁有一個持久化標識(identifier)。 持久(Persistent)的實例可能是剛被保存的,或剛被加載的,無論哪一種,按定義,它存在于相關聯(lián)的Session作用范圍內。 Hibernate會檢測到處于持久(Persistent)狀態(tài)的對象的任何改動,在當前操作單元(unit of work)執(zhí)行完畢時將對象數(shù)據(jù)(state)與數(shù)據(jù)庫同步(synchronize)。 開發(fā)者不需要手動執(zhí)行UPDATE。將對象從持久(Persistent)狀態(tài)變成瞬時(Transient)狀態(tài)同樣也不需要手動執(zhí)行DELETE語句。

游離(Detached) - 與持久(Persistent)對象關聯(lián)的Session被關閉后,對象就變?yōu)橛坞x(Detached)的。 對游離(Detached)對象的引用依然有效,對象可繼續(xù)被修改。游離(Detached)對象如果重新關聯(lián)到某個新的Session上, 會再次轉變?yōu)槌志?Persistent)的(在Detached其間的改動將被持久化到數(shù)據(jù)庫)。 這個功能使得一種編程模型,即中間會給用戶思考時間(user think-time)的長時間運行的操作單元(unit of work)的編程模型成為可能。 我們稱之為應用程序事務,即從用戶觀點看是一個操作單元(unit of work)。

Hibernate中對象的游離狀態(tài)是指Session關閉之后,持久化對象變成離線對象,離線對象就不能同數(shù)據(jù)庫同步,也不再受Hibernate管理。操作 處于游離態(tài)對象 經(jīng)常會報 session已關閉的錯誤。

假設場景:
有兩個類, Team, Person. 映射關系是Team一對多Person, 采用lazy fetch策略。
session begin
Team t = *Dao.get()
session end
t.getPersons()// 出錯
如果是用spring管理session的情況,事務外操作t.getPerons()也跟上面情況一樣。
這種情況在生產環(huán)境多表現(xiàn)為在jsp頁面操作 t對象時出錯。

解決方法:
1. 取消lazy fetch策略
缺點:會導致過多的數(shù)據(jù)庫訪問,因為是一對多的情況。
2. 在事務內就先把關聯(lián)的對象取出
缺點:會導致service層方法不統(tǒng)一,因為要分開取出與不取出的情況。
3. 使用spring的 openSessionInview機制
缺點: session打開的時間比較長, 使用不好可能會導致out of memory

 

一個游離態(tài)的對象轉換為持久戰(zhàn)態(tài),有以下幾種方法:

1、session.saveOrUpdate(object)。這語句會把游離態(tài)的PO轉為持久態(tài)的PO并提交給數(shù)據(jù)庫

2、session.merge(object)。這語句會把游離態(tài)的PO轉為持久態(tài)的PO,并進行合并操作。

3、session.lock(object, LockMode.NONE)。這語句只會把游離態(tài)的PO轉為持久態(tài)PO,不作其他操作。不過,PO必須是沒有修改過的,這方法挺適合做一個應用層

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多