乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      (轉(zhuǎn)) Hibernate對(duì)象的三種狀態(tài)

       為什么圖書(shū)館13 2016-06-26

      在Hibernate中,對(duì)象有三種狀態(tài):臨 時(shí)狀態(tài)(Transient)、持久狀態(tài)(Persistent)和游離狀態(tài)(Detached)。

      處于持久態(tài)的對(duì)象也稱為 PO(PersistenceObject),臨時(shí)對(duì)象和游離對(duì)象也稱為VO(ValueObject). 
      1. 臨時(shí)狀態(tài) 
      由 new命令開(kāi)辟內(nèi)存空間的java對(duì)象,例如:

      User user=new User();

       時(shí)對(duì)象在內(nèi)存孤立存在,它是攜帶信息的載體,不和數(shù)據(jù)庫(kù)的數(shù)據(jù)有任何關(guān)聯(lián)關(guān)系.

      (a) 如 果沒(méi)有變量對(duì)該對(duì)象進(jìn)行引用,它將被gc回收;

      (b) 在Hibernate中,可通過(guò) session的save()或saveOrUpdate()方法將瞬時(shí)對(duì)象與數(shù)據(jù)庫(kù)相關(guān)聯(lián),并將數(shù)據(jù)對(duì)應(yīng)的插入數(shù)據(jù)庫(kù)中,此時(shí)該臨時(shí)對(duì)象轉(zhuǎn)變成持久化對(duì) 象.

      2. 持久狀態(tài) 
      處于該狀態(tài)的對(duì)象在數(shù)據(jù)庫(kù)中具有對(duì)應(yīng)的記錄,并擁有一個(gè)持久化標(biāo)識(shí).通過(guò)session的get()、load() 等方法獲得的對(duì)象都是持久對(duì)象。

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

      (a) 如果是用hibernate的delete()方法,對(duì)應(yīng)的持久對(duì)象就變成臨時(shí)對(duì)象,因數(shù)據(jù)庫(kù)中 的對(duì)應(yīng)數(shù)據(jù)已被刪除,該對(duì)象不再與數(shù)據(jù)庫(kù)的記錄關(guān)聯(lián).

      (b) 當(dāng)一個(gè)session執(zhí)行close()或 clear()、evict()之后,持久對(duì)象變成游離對(duì)象,此時(shí)該對(duì)象雖然具有數(shù)據(jù)庫(kù)識(shí)別值,但它已不在HIbernate持久層的管理之下.

      持久對(duì)象具有如下特點(diǎn):

      (1)和session實(shí)例關(guān)聯(lián);

      (2)在數(shù)據(jù)庫(kù)中有與之關(guān)聯(lián)的記錄,并 擁有持久化標(biāo)識(shí).

      3. 游離狀態(tài)
      當(dāng)與某持久對(duì)象關(guān)聯(lián)的session被關(guān)閉后,該持久對(duì)象轉(zhuǎn)變?yōu)橛坞x對(duì)象.當(dāng)游離對(duì)象被重新關(guān)聯(lián)到session上 時(shí),又再次轉(zhuǎn)變成持久對(duì)象(在Detached其間的改動(dòng)將被持久化到數(shù)據(jù)庫(kù)中)。
       游離對(duì)象擁有數(shù)據(jù)庫(kù)的識(shí)別值,但已不在持久化管理范圍之內(nèi)。

      (a) 通 過(guò)update()、saveOrUpdate()等方法,游離對(duì)象可轉(zhuǎn)變成持久對(duì)象.

      (b) 如果是用hibernate的delete()方法,對(duì)應(yīng)的游離對(duì)象就變成臨時(shí)對(duì)象,因數(shù)據(jù)庫(kù)中的 對(duì)應(yīng)數(shù)據(jù)已被刪除,該對(duì)象不再與數(shù)據(jù)庫(kù)的記錄關(guān)聯(lián).

      (c) 在沒(méi)有任何變量引用它時(shí),它將被gc在適當(dāng)?shù)?時(shí)候回收;

      游離對(duì)象具有如下特點(diǎn):

      (1)本質(zhì)上與瞬時(shí)對(duì)象相同,在沒(méi)有任何變量引用它時(shí),JVM會(huì)在適當(dāng)?shù)臅r(shí)候?qū)⑺厥?

      (2)比瞬時(shí)對(duì)象多了一個(gè)數(shù)據(jù)庫(kù)記錄標(biāo)識(shí)值.

      示例:

      Session session=factory.openSession();
      User user=new User(); 
      //user對(duì)象處于臨時(shí)狀態(tài)。
      user.setName("張三");
      user.setAge(18);
      Transaction tran=Session.beginTransaction();
      session.save(user);
      //user對(duì)象轉(zhuǎn)化為持 久狀態(tài)。
      tran.commit(); 
      session.close();
      //user對(duì)象轉(zhuǎn)化為游離狀態(tài)。
      user.setName(" 李四"); 
      Session session2=factory.openSession();
      Transaction tran2=Session2.beginTransaction();
      Session2.update(user);
      //user對(duì)象 轉(zhuǎn)化為持久狀態(tài)。
      tran2.commit();(游離狀態(tài)中對(duì)象的變動(dòng)在再次持久時(shí)會(huì)被持久化到數(shù)據(jù)庫(kù)) 
      Transaction tran3=Session.beginTransaction();
      Session2.delete(user);
      //user對(duì)象轉(zhuǎn) 化為臨時(shí)狀態(tài)。
      tran3.commit();
      session2.close();

      Session的不同操作對(duì)對(duì)象狀態(tài)的影響:
      Session 的save()方法
      save()方法將一個(gè)臨時(shí)對(duì)象轉(zhuǎn)變?yōu)槌志脤?duì)象。
      Session的update()方法
      update()方法 將一個(gè)游離對(duì)象轉(zhuǎn)變?yōu)槌志脤?duì)象。
      Session的lock()方法
      調(diào)用lock()方法將對(duì)象同Session相關(guān)聯(lián)而不強(qiáng)制更新。
      Session 的merge()方法
      拷貝指定對(duì)象的狀態(tài)到具有相同對(duì)象標(biāo)識(shí)符的持久對(duì)象。
      Session的saveOrUpdate()方法
      saveOrUpdate() 方法對(duì)于臨時(shí)對(duì)象,執(zhí)行save()方法,對(duì)于游離對(duì)象,執(zhí)行update()方法。

      Session的load()和get()方法
      load() 方法和get()方法都可以根據(jù)對(duì)象的標(biāo)識(shí)符加載對(duì)象,這兩個(gè)方法加載的對(duì)象都位于Session的緩存中,屬于持久對(duì)象。
      Session的 delete()方法
      delete()方法用于從數(shù)據(jù)庫(kù)中刪除與持久化對(duì)象對(duì)應(yīng)的記錄。如果傳入的是一個(gè)持久化對(duì)象,Session就執(zhí)行一條 delete語(yǔ)句。如果傳入的參數(shù)是游離對(duì)象,先使分離對(duì)象與Session關(guān)聯(lián),使它變?yōu)槌志没瘜?duì)象,然后才計(jì)劃執(zhí)行一個(gè)delete語(yǔ)句。
      Session 的evict()方法
      evict()方法從Session的緩存中刪除一個(gè)持久對(duì)象。

      在Hibernate中,對(duì)象有三種狀態(tài):臨 時(shí)狀態(tài)(Transient)、持久狀態(tài)(Persistent)和游離狀態(tài)(Detached)。

      處于持久態(tài)的對(duì)象也稱為 PO(PersistenceObject),臨時(shí)對(duì)象和游離對(duì)象也稱為VO(ValueObject). 
      1. 臨時(shí)狀態(tài) 
      由 new命令開(kāi)辟內(nèi)存空間的java對(duì)象,例如:

      User user=new User();

       時(shí)對(duì)象在內(nèi)存孤立存在,它是攜帶信息的載體,不和數(shù)據(jù)庫(kù)的數(shù)據(jù)有任何關(guān)聯(lián)關(guān)系.

      (a) 如 果沒(méi)有變量對(duì)該對(duì)象進(jìn)行引用,它將被gc回收;

      (b) 在Hibernate中,可通過(guò) session的save()或saveOrUpdate()方法將瞬時(shí)對(duì)象與數(shù)據(jù)庫(kù)相關(guān)聯(lián),并將數(shù)據(jù)對(duì)應(yīng)的插入數(shù)據(jù)庫(kù)中,此時(shí)該臨時(shí)對(duì)象轉(zhuǎn)變成持久化對(duì) 象.

      2. 持久狀態(tài) 
      處于該狀態(tài)的對(duì)象在數(shù)據(jù)庫(kù)中具有對(duì)應(yīng)的記錄,并擁有一個(gè)持久化標(biāo)識(shí).通過(guò)session的get()、load() 等方法獲得的對(duì)象都是持久對(duì)象。

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

      (a) 如果是用hibernate的delete()方法,對(duì)應(yīng)的持久對(duì)象就變成臨時(shí)對(duì)象,因數(shù)據(jù)庫(kù)中 的對(duì)應(yīng)數(shù)據(jù)已被刪除,該對(duì)象不再與數(shù)據(jù)庫(kù)的記錄關(guān)聯(lián).

      (b) 當(dāng)一個(gè)session執(zhí)行close()或 clear()、evict()之后,持久對(duì)象變成游離對(duì)象,此時(shí)該對(duì)象雖然具有數(shù)據(jù)庫(kù)識(shí)別值,但它已不在HIbernate持久層的管理之下.

      持久對(duì)象具有如下特點(diǎn):

      (1)和session實(shí)例關(guān)聯(lián);

      (2)在數(shù)據(jù)庫(kù)中有與之關(guān)聯(lián)的記錄,并 擁有持久化標(biāo)識(shí).

      3. 游離狀態(tài)
      當(dāng)與某持久對(duì)象關(guān)聯(lián)的session被關(guān)閉后,該持久對(duì)象轉(zhuǎn)變?yōu)橛坞x對(duì)象.當(dāng)游離對(duì)象被重新關(guān)聯(lián)到session上 時(shí),又再次轉(zhuǎn)變成持久對(duì)象(在Detached其間的改動(dòng)將被持久化到數(shù)據(jù)庫(kù)中)。
       游離對(duì)象擁有數(shù)據(jù)庫(kù)的識(shí)別值,但已不在持久化管理范圍之內(nèi)。

      (a) 通 過(guò)update()、saveOrUpdate()等方法,游離對(duì)象可轉(zhuǎn)變成持久對(duì)象.

      (b) 如果是用hibernate的delete()方法,對(duì)應(yīng)的游離對(duì)象就變成臨時(shí)對(duì)象,因數(shù)據(jù)庫(kù)中的 對(duì)應(yīng)數(shù)據(jù)已被刪除,該對(duì)象不再與數(shù)據(jù)庫(kù)的記錄關(guān)聯(lián).

      (c) 在沒(méi)有任何變量引用它時(shí),它將被gc在適當(dāng)?shù)?時(shí)候回收;

      游離對(duì)象具有如下特點(diǎn):

      (1)本質(zhì)上與瞬時(shí)對(duì)象相同,在沒(méi)有任何變量引用它時(shí),JVM會(huì)在適當(dāng)?shù)臅r(shí)候?qū)⑺厥?

      (2)比瞬時(shí)對(duì)象多了一個(gè)數(shù)據(jù)庫(kù)記錄標(biāo)識(shí)值.

      示例:

      Session session=factory.openSession();
      User user=new User(); 
      //user對(duì)象處于臨時(shí)狀態(tài)。
      user.setName("張三");
      user.setAge(18);
      Transaction tran=Session.beginTransaction();
      session.save(user);
      //user對(duì)象轉(zhuǎn)化為持 久狀態(tài)。
      tran.commit(); 
      session.close();
      //user對(duì)象轉(zhuǎn)化為游離狀態(tài)。
      user.setName(" 李四"); 
      Session session2=factory.openSession();
      Transaction tran2=Session2.beginTransaction();
      Session2.update(user);
      //user對(duì)象 轉(zhuǎn)化為持久狀態(tài)。
      tran2.commit();(游離狀態(tài)中對(duì)象的變動(dòng)在再次持久時(shí)會(huì)被持久化到數(shù)據(jù)庫(kù)) 
      Transaction tran3=Session.beginTransaction();
      Session2.delete(user);
      //user對(duì)象轉(zhuǎn) 化為臨時(shí)狀態(tài)。
      tran3.commit();
      session2.close();

      Session的不同操作對(duì)對(duì)象狀態(tài)的影響:
      Session 的save()方法
      save()方法將一個(gè)臨時(shí)對(duì)象轉(zhuǎn)變?yōu)槌志脤?duì)象。
      Session的update()方法
      update()方法 將一個(gè)游離對(duì)象轉(zhuǎn)變?yōu)槌志脤?duì)象。
      Session的lock()方法
      調(diào)用lock()方法將對(duì)象同Session相關(guān)聯(lián)而不強(qiáng)制更新。
      Session 的merge()方法
      拷貝指定對(duì)象的狀態(tài)到具有相同對(duì)象標(biāo)識(shí)符的持久對(duì)象。
      Session的saveOrUpdate()方法
      saveOrUpdate() 方法對(duì)于臨時(shí)對(duì)象,執(zhí)行save()方法,對(duì)于游離對(duì)象,執(zhí)行update()方法。

      Session的load()和get()方法
      load() 方法和get()方法都可以根據(jù)對(duì)象的標(biāo)識(shí)符加載對(duì)象,這兩個(gè)方法加載的對(duì)象都位于Session的緩存中,屬于持久對(duì)象。
      Session的 delete()方法
      delete()方法用于從數(shù)據(jù)庫(kù)中刪除與持久化對(duì)象對(duì)應(yīng)的記錄。如果傳入的是一個(gè)持久化對(duì)象,Session就執(zhí)行一條 delete語(yǔ)句。如果傳入的參數(shù)是游離對(duì)象,先使分離對(duì)象與Session關(guān)聯(lián),使它變?yōu)槌志没瘜?duì)象,然后才計(jì)劃執(zhí)行一個(gè)delete語(yǔ)句。
      Session 的evict()方法
      evict()方法從Session的緩存中刪除一個(gè)持久對(duì)象。

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多