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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Hibernate入門04-Hibernate中Java對象的三種狀態(tài)

2019-11-14 15:09:45
字體:
供稿:網(wǎng)友

 

目錄:(后續(xù)不斷更新...)

  1. Hibernate 入門 01 - 框架技術(shù) (介紹Hibernate框架的發(fā)展由來)
  2. Hibernate 入門 02 - Hibernate介紹及其環(huán)境搭建
  3. Hibernate 入門 03 - 使用Hibernate完成持久化操作
  4. Hibernate 入門 04 - Hibernate中java對象的三種狀態(tài)

 

  

 ▁▃▅ Hibernate中Java對象的三種狀態(tài)▅▃▁

 

 

 

1. Java對象的三種狀態(tài)

  當(dāng)應(yīng)用通過調(diào)用Hibernate API與框架發(fā)生交互時(shí),需要從持久化的角度關(guān)注應(yīng)用對象的生命周期。

  持久化聲明周期是Hibernate中的一個(gè)關(guān)鍵概念,正確地理解生命周期,可以更好地了解Hibernate的實(shí)現(xiàn)原理,掌握Hibernate的正確用法。

  Hibernate框架通過session來管理Java對象的狀態(tài),在持久化生命周期中,Java對象存在著如下三種狀態(tài):

 

  • 瞬時(shí)狀態(tài)(Transient)

  通過new創(chuàng)建對象后,對象并沒有l(wèi)ike持久化,它并未與數(shù)據(jù)庫中的數(shù)據(jù)有任何關(guān)聯(lián),此時(shí)Java對象的狀態(tài)為瞬時(shí)狀態(tài)。

  Session對于瞬時(shí)狀態(tài)的Java對象是一無所知的,當(dāng)對象不再被其他對象引用時(shí),它的所有數(shù)據(jù)也就丟失了,對象將會(huì)被Java虛擬機(jī)按照垃圾回收機(jī)制處理。

  • 持久狀態(tài)(Persistent)

  當(dāng)對象與Session關(guān)聯(lián),被Session管理時(shí),它就處于持久狀態(tài)。處于持久狀態(tài)的對象擁有數(shù)據(jù)庫標(biāo)識(shí)(數(shù)據(jù)庫中的主鍵值)。

  那么,對象是什么時(shí)候與Session發(fā)生關(guān)聯(lián)的呢?有兩種方法:

    第一種,通過Sesison的查詢接口,或者get()方法,或者load()方法從數(shù)據(jù)庫中加載對象的時(shí)候,加載的對象是與數(shù)據(jù)庫表中的一條記錄關(guān)聯(lián)的,此時(shí)對象與加載它的Session發(fā)生關(guān)聯(lián);

    第二種,瞬時(shí)狀態(tài)的對象,通過Session的save()方法或SaveOrUpdate()方法時(shí),Java對象也與Session發(fā)生關(guān)聯(lián)。

  對于處于持久狀態(tài)的對象,Session會(huì)持續(xù)跟蹤和管理它們,如果對象的內(nèi)部狀態(tài)發(fā)生了任何變更,Hibernate會(huì)選擇合適的時(shí)機(jī)(如事務(wù)提交時(shí))將變更固化到數(shù)據(jù)庫中。

  • 游離狀態(tài)

  處于持久狀態(tài)的對象,脫離與其關(guān)聯(lián)的nSession的管理后,對象就處于游離狀態(tài)。

  處于游離狀態(tài)的對象,Session無法保證對象所包含的數(shù)據(jù)與數(shù)據(jù)庫中的記錄一直,因?yàn)镠ibernate已經(jīng)無法感知對該對象的任何操作。

  Session提供了兩個(gè)方法(update()、merge()),將處于游離狀態(tài)的對象,與一個(gè)新的Session發(fā)生關(guān)聯(lián)。

  此時(shí),對象的狀態(tài)就從游離狀態(tài)重新轉(zhuǎn)換為持久狀態(tài)。

 

 

 

 

 

2. 三種狀態(tài)之間的轉(zhuǎn)換

  在Hibernate應(yīng)用中,不同的持久化操作會(huì)導(dǎo)致對象狀態(tài)的改變。如圖描述了對象狀態(tài)的轉(zhuǎn)換:

 

  使用new關(guān)鍵字構(gòu)建對象,該對象的狀態(tài)是瞬時(shí)狀態(tài)。

2.1 瞬時(shí)狀態(tài)轉(zhuǎn)為持久狀態(tài)

  使用Session對象的save()或saveOrUpdate()方法保存對象后,該對象的狀態(tài)由瞬時(shí)狀態(tài)轉(zhuǎn)換為持久狀態(tài)。

  使用Session對象的get()或load()方法獲取對象,該對象的狀態(tài)是持久狀態(tài)。

2.2 持久狀態(tài)轉(zhuǎn)為瞬時(shí)狀態(tài)

  執(zhí)行Session對象的delete()方法后,對象由原來的持久狀態(tài)變?yōu)樗矔r(shí)狀態(tài),因?yàn)榇藭r(shí)該對象沒有與任何的數(shù)據(jù)庫數(shù)據(jù)關(guān)聯(lián)。

2.3 持久狀態(tài)轉(zhuǎn)為游離狀態(tài)

  吃行了Session對象的evict()、clear()或close()方法,對象由原來的持久狀態(tài)轉(zhuǎn)為游離狀態(tài)。

2.4 游離狀態(tài)轉(zhuǎn)為持久狀態(tài)

  重新獲取Session對象,執(zhí)行Session對象的update()或saveOrUpdate()方法,對象由游離狀態(tài)轉(zhuǎn)為持久狀態(tài),該對象再次與Session對象相關(guān)聯(lián)。

2.5 游離狀態(tài)轉(zhuǎn)為瞬時(shí)狀態(tài)

  執(zhí)行Session對象的delete()方法,對象由游離狀態(tài)轉(zhuǎn)為瞬時(shí)狀態(tài)。

  處于瞬時(shí)狀態(tài)或游離狀態(tài)的對象不再被其他對象引用時(shí),會(huì)被Java虛擬機(jī)按照垃圾回收機(jī)制處理。

 

 

 

 

3. 練習(xí)(好記性不如爛鍵盤) - 輸出對象的狀態(tài)

  需求:為以下兩段代碼補(bǔ)充語句,輸出各個(gè)階段對象的狀態(tài)。

  代碼1:

 1 try{ 2     // 省略部分代碼... 3     session = sessionFactory.openSession(); 4     tx = session.beginTransaction();    // 開始一個(gè)事務(wù) 5     User user = (User)session.load(User.class, new Integer("1001"));    // 獲取用戶對象 6     user.setUsername("張董");    // 修改用戶信息 7     tx.commit();    // 提交事務(wù) 8 }catch(HibernateException e){ 9     e.PRintStackTrace();10     tx.rollback();    // 回滾事務(wù)11 }finally{12     if(null != session){13         session.close();    // 關(guān)閉session14     }15 }

  代碼2:

 1 try{ 2     // 省略部分代碼 3     session = sessionFactory.openSession();    // 打開session 4     tx = session.beginTransaction();    // 開始一個(gè)事務(wù) 5     User user = (User)session.load(User.class, new Integer("1000"));    // 獲取User對象 6     session.delete(user);    // 持久化操作 - 刪除 7     tx.commit();    // 提交事務(wù) 8 }catch(HibernateException e){ 9     e.printStackTrace();10     tx.rollback();    // 回滾事務(wù)11 }finally{12     if(null != session){13         session.close();    // 關(guān)閉session14     }15 }

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久精片 | 日韩精品中文字幕一区二区三区 | 深夜影院一级毛片 | 亚洲免费观看视频 | 精品一区二区电影 | 久久精品视频7 | 欧美日本一 | 亚洲最大的成人网 | 男人的天堂色偷偷 | 久久99深爱久久99精品 | 成人小视频免费在线观看 | 成人黄视频在线观看 | 久久久麻豆 | 成年免费网站 | 国产精品视频一区二区三区四区国 | 精品日韩欧美 | 羞羞视频免费观看网站 | 91av久久 | 香蕉国产9| 色成人在线 | japanese末成年free | jizzjizzjizz少妇| a免费毛片 | 在线播放亚洲 | 黄色香蕉视频 | 91av在线免费视频 | 斗破苍穹在线观看免费完整观看 | 国产一区精品在线观看 | 欧美一级黄色免费看 | 2021国产精品| 日本aⅴ在线 | 96视频在线免费观看 | 91午夜在线观看 | 欧美日韩视频在线播放 | 成人午夜免费看 | 国产成人高清成人av片在线看 | 日本一级黄色毛片 | 成人在线网站 | 欧美人与牲禽动交精品一区 | 55夜色66夜色国产精品视频 | 国产1区2 |