歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Hibernate PO對象狀態

Hibernate的PO對象有三種狀態:臨時狀態(又稱臨時態)、持久狀態(又稱為持久態)和脫管狀態(又稱為脫管態、游離態)。處理持久態的對象也稱為PO,臨時對象和脫管對象也稱為VO。

1、臨時態:

簡單來說,由new命令開辟內存空間時剛生成的java對象就是處於臨時態。

比如:

User user = new User();

如果沒有變量對該對象進行引用,它將被java虛擬機回收。

臨時對象在內存中是孤立存在的,它是攜帶信息的載體,不和數據庫的數據有任何關聯關系。在hibernate中,可以通過Session的save()或者savaOrUpdate()方法將臨時對象與數據庫相關聯,並插入數據庫,轉變成持久化對象。

2、持久態:

持久化狀態,該對象在數據庫中具有對應的一條記錄,並擁有一個持久化標識(如:Integer id 其實對應的就是記錄表的一個主鍵)。如果hibernate 中的Dao層方法delete(),就會把對應的持久化對象變為臨時對象,對應數據庫中的記錄也會被刪除,不再與數據庫的記錄關聯。

總結一下,持久化對象特點:

(1)和Session實例關聯;

(2)與數據庫中有與之關聯的記錄;

3、脫管態(游離態):

當與某持久化對象關聯的Session被關閉後,該持久化對象轉變為脫管對象。脫管對象被重新關聯到Session上時,將再次轉變成持久化對象。

注意:脫管對象擁有數據庫的識別值,可通過update()、savaOrUpdate()等方法,轉變成持久對象。

脫管對象特點:

(1)本質上與臨時對象相同,在沒有任何變量引用它時,JVM會在核實的時候將它回收;

(2)比臨時對象多了一個數據庫記錄標識值;

4、Session中常用方法對PO對象狀態的作用

臨時狀態、持久化狀態和脫管狀態(也就是游離狀態),三種狀態轉化的方法都是通 過session來調用,瞬態到持久態的方法有save()、saveOrUpdate()、get()、load();持久態到瞬態的方法有 delete();游離態到持久態的方法有update()、saveOrUpdate()、lock();持久態到游離態的方法 有:session.close()、session.evict()、session.clear()。

5、save()和update()的區別

save()的作用是保存一個新的對象,update()可以把一個脫管狀態的對象(一定要和一個記錄對應)更新到數據庫。

6、update()和saveOrUpdate()區別

saveOrUpdate()方法基本上就是合成了save()和update()

通常下面的場景會使用到update()和saveOrUpdate()::

(1)程序在第一個Session中加載對象,接著把Session()關閉;

(2)該對象被傳遞到表示層;

(3)對象發生了一些改動;

(4)該對象被返回到業務邏輯層最終到達持久層;

(5)程序創建第二個Session,調用第二個Session的update()方法持久化這些改動。

Hibernate整體理解 http://www.linuxidc.com/Linux/2014-07/104405.htm

Hibernate的映射機制  http://www.linuxidc.com/Linux/2014-12/110265.htm

Hibernate 的詳細介紹:請點這裡
Hibernate 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved