Hibernate-----5、持久化對象

來源:互聯網
上載者:User

標籤:hibernate   orm   java   持久化對象   架構   

一、持久化類的要求

        提供一個無參構造器:Hibernate可使用Constructor.newInstance()來建立持久化類的執行個體

        提供一個識別屬性:識別屬性通常映射資料庫表的主鍵欄位(建議使用基本類型的封裝類型作為識別屬性的類型)盡量避免使用基礎資料型別 (Elementary Data Type)

        為持久化類的每個屬性提供setter、getter方法

        使用非final的類

        重寫equlas、hashCode方法:如需把持久化類的執行個體放入Set中


二、持久化對象的狀態

        

         瞬態:對象由new建立,且尚未與Hibernate Session關聯的對象;瞬態對象不會被持久化到資料庫中,也不會被賦予持久化標識

        

         持久化:持久化執行個體在資料庫中有對應的記錄,並擁有一個持久化標識(identifier); 持久化對象必須與指定的Hibernate Session關聯

         託管:某個執行個體曾處於持久化狀態,但隨著與之關聯的Session被關閉,該對象就變成託管狀態;託管對象的引用依然有效,對象可繼續被修改

         



三、改變持久化對象狀態

       瞬態---》持久化狀態(Session的方法):

       Serializable save(Object obj):將obj對象變為持久化狀態,該對象的屬性將被儲存到資料庫

       Serializable save(Ojbect obj,Object pk):將obj對象儲存到資料庫並指定主鍵值 

 

       void persist(Object obj):將obj對象轉化為持久化狀態,該對象的屬性將被儲存到資料庫

       void persist(Object obj,Object pk):將obj對象儲存到資料庫並指定主鍵值 


       save方法會立即將持久化對象對應的資料插入資料庫;

       persist方法不會立即轉換成insert語句,保證當它在一個事物外部被調用


       當把一個瞬態實體變成持久化狀態時,Hibernate會在底層對應的產生一條insert語句把實體對應的資料記錄插入資料表

 

       load()載入一個持久化執行個體,根據持久化類的識別屬性值載入持久化執行個體(根據主鍵從資料表中載入一條新記錄):

       get()載入一個持久化執行個體(根據主鍵裝載持久化執行個體)

       News n = session.load(News.class , new Integer(pk));

       pk:載入的持久化執行個體的識別屬性

 

       load():不會立即訪問資料庫;如無對應的記錄,可能拋出HibernateException異常;若在類對應檔中指定了消極式載入,則返回一個未初始化的代理對象(可理解為持久化對象的替身),該代理對象並沒有裝載資料記錄,直到程式調用該代理對象的某方法時,Hibernate才會去訪問資料庫;具有消極式載入功能

       get(): 立即訪問資料庫;若無對應的記錄,則返回null;

 

       執行load、get方法載入實體時,Hibernate會在底層對應的產生一條select語句,這條select語句帶有“where<主鍵列>=<識別屬性值>”子句;都是根據主鍵載入持久化執行個體

       託管狀態---》持久化狀態:

       當修改託管對象的狀態後,應用新的Session來儲存這些修改,可通過update()、merge()、updateOrSave()來儲存:

Student student = firstSess.load(Student.class,new Integer(20));firstSess.close();              // 第一個Session已關閉Student.setTitle(“新標題”);   // 修改託管狀態下的持久化對象         Session secondSess = ...         // 開啟第二個SessionsecondSess.update(student);      // 儲存託管對象所做的修改

       當使用update來儲存對持久化對象所做的修改時,如果不清楚該對象是否曾經持久化過,可用updateOrSave()方法

       merge方法也可將託管對象所做的修改儲存到資料庫,merge與update方法最大的區別:merge方法不會持久化給定對象(當執行sess.update(a)後,a對象將會變成持久化狀態;而執行sess.merge(a)後,a對象依然不是持久化狀態,a對象依然不會被關聯到Session上)


       修改持久化執行個體:

Studentstudent = (Student) session.load(Student.class, newInteger(22));student.setName("HHH");session.flush();

       刪除持久化執行個體:

Studentstudent = Session.load(Student.class,new Integer(PK));Session.delete(student);





Hibernate-----5、持久化對象

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.