大家對(duì)以下3個(gè)措施定然不面生,一些IDE生成的代碼等閑都有下面三個(gè)措施:
public Person merge(Person detachedInstance) { log.debug("merging Person
instance"); try { Person result = (Person) getSession().merge(
detachedInstance); log.debug("merge successful"); return result; } catch
(RuntimeException re) { log.error("merge failed", re); throw re; } } public void
attachDirty(Person instance) { log.debug("attaching dirty Person instance"); try
{ getSession().saveOrUpdate(instance); log.debug("attach successful"); } catch
(RuntimeException re) { log.error("attach failed", re); throw re; } } public
void attachClean(Person instance) { log.debug("attaching clean Person
instance"); try { getSession().lock(instance, LockMode.NONE); log.debug("attach
successful"); } catch (RuntimeException re) { log.error("attach failed", re);
throw re; } }
merge:將傳入的detached事態(tài)的對(duì)象的屬性復(fù)制到永遠(yuǎn)化對(duì)象中,并歸來(lái)該永遠(yuǎn)化對(duì)象
。萬(wàn)一該session中未曾關(guān)系的永遠(yuǎn)化對(duì)象,加載一個(gè),萬(wàn)一傳入對(duì)象未保留,保留一個(gè)副本并作為永遠(yuǎn)對(duì)象歸來(lái),傳入對(duì)象依舊堅(jiān)持detached事態(tài)。
attachDirty:將傳入的對(duì)象永遠(yuǎn)化并保留。萬(wàn)一對(duì)象未保留(Transient事態(tài)),調(diào)用save措施保留。萬(wàn)一對(duì)象已保留(Detached事態(tài)),調(diào)用update措施將對(duì)象與Session重新關(guān)系。
attachClean:將傳入的對(duì)象事態(tài)設(shè)置為Transient事態(tài)。
解釋一下,在Hibernate中的對(duì)象有三種事態(tài),即:
俄而事態(tài)(Transient)、永遠(yuǎn)事態(tài)(Persistent)、脫管事態(tài)(Detached)
1、俄而事態(tài)(Transient)
由new號(hào)召開(kāi)發(fā)內(nèi)存空間的Java對(duì)象,也即便平時(shí)所純熟的等閑Java對(duì)象。
如:Person p = new Person();
俄而對(duì)象個(gè)性:
(1)不和Session實(shí)例關(guān)系
(2)在數(shù)據(jù)庫(kù)中未曾和俄而對(duì)象關(guān)系的登記
2、永遠(yuǎn)事態(tài)(Persistent)
永遠(yuǎn)的實(shí)例在數(shù)據(jù)庫(kù)中有對(duì)應(yīng)的登記,并具有一個(gè)永遠(yuǎn)化標(biāo)識(shí)(identifier).
永遠(yuǎn)對(duì)象總是與Session和Transaction相干聯(lián),在一個(gè)Session中,對(duì)永遠(yuǎn)對(duì)象的改換不會(huì)即刻對(duì)數(shù)據(jù)庫(kù)舉行改變,而定然在Transaction終止,也即便厲行commit()爾后,才在數(shù)據(jù)庫(kù)中懇摯運(yùn)行SQL舉行改變,永遠(yuǎn)對(duì)象的事態(tài)才會(huì)與數(shù)據(jù)庫(kù)舉行同步。在同步之前的永遠(yuǎn)對(duì)象稱為臟(dirty)對(duì)象。
俄而對(duì)象轉(zhuǎn)為永遠(yuǎn)對(duì)象:
(1)
穿越Session的save()和saveOrUpdate()措施把一個(gè)俄而對(duì)象與數(shù)據(jù)庫(kù)相干聯(lián),這個(gè)俄而對(duì)象就成為永遠(yuǎn)化對(duì)象。
(2)
利用fine(),無(wú)線通訊模塊get(),load()和iterater()待措施查詢到的數(shù)據(jù)對(duì)象,將成為永遠(yuǎn)化對(duì)象。
永遠(yuǎn)化對(duì)象的個(gè)性:
(1) 和Session實(shí)例關(guān)系
(2) 在數(shù)據(jù)庫(kù)中有和永遠(yuǎn)對(duì)象關(guān)系的登記
3、脫管事態(tài)(Detached)
與永遠(yuǎn)對(duì)象關(guān)系的Session被關(guān)閉后,對(duì)象就變?yōu)槊摴軐?duì)象。對(duì)脫管對(duì)象的引用依舊管用,對(duì)象可繼續(xù)被修正。
脫管對(duì)象個(gè)性:
(1)
性質(zhì)上和俄而對(duì)象雷同
(2) 只是比愛(ài)俄而對(duì)象多了一個(gè)數(shù)據(jù)庫(kù)登記標(biāo)識(shí)值id.
永遠(yuǎn)對(duì)象轉(zhuǎn)為脫管對(duì)象:
當(dāng)厲行close()或clear(),evict()爾后,永遠(yuǎn)對(duì)象會(huì)變?yōu)槊摴軐?duì)象。
俄而對(duì)象轉(zhuǎn)為永遠(yuǎn)對(duì)象:
穿越Session的update(),saveOrUpdate()和lock()等措施,把脫管對(duì)象變?yōu)橛肋h(yuǎn)對(duì)象。