程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> Hibernate對象3種狀態

Hibernate對象3種狀態

編輯:DB2教程

Hibernate對象3種狀態


我們都知道hibernate中的數據對象有3種狀態,那麼這三種狀態到底是哪種狀態,他們之間是如何轉換的,這些狀態都有什麼用,帶著這一系列的問題,我們一起對hibernate的3種狀態了解一下。

hibernate的3種狀態圖如下所示:


\

瞬時狀態(Transient):由Java通過new方法創建的對象或者托管、持久狀態調運session的delete()方法得到的對象。值只存在與內存中,和數據庫中沒有任何關聯。我麼可以通過調運session的save()/seavOrUpdate()方法,將這個內存中的零時對象持久化到數據庫中,這樣,這個對象就和session有了關聯,和數據庫也有了關聯,就是一個持久狀態的對象。如果長時間只存在於內存中不被別的對象引用,那麼就會被Java的垃圾回收機制回收,釋放內存。

持久狀態(Pesistent):由瞬時狀態保存(調運session的save()方法)以後或者直接通過Java的方法從session中查詢(調運session的get()等方法)得到或者托管狀態調運session的update()方法得到的結果對象。對象信息不僅存在於內存中,而且存在於數據庫中,並且內存中的和數據庫中的信息是完全相同的。我麼可以通過調運事物的方法,將持久狀態和數據庫中的信息脫離干系,這個時候它就變成托管狀態,或者我們調運session的delete()方法,將它從數據庫中刪除,那麼它又變成瞬時狀態。

托管狀態(Detached):由持久狀態調運事物的方法(事物結束以後,和session沒有關系)以後得到的對象。對象信息存在與內存中,數據庫中也有,但是數據庫中的信息和對象的信息出來有相同的Id以為,不再有其他的關系,他們可以不同。調運session的update()方法以後,再次將內存中的對象同步到數據中,又變成持久狀態。或調運delete()方法,完全和數據庫脫離干系變成瞬時狀態。如果長時間處於內存中不被別的對象引用,同樣會被Java的內存回收機制回收,釋放內存。

狀態\說明

性質

來源

去處

瞬時狀態

Transient

只存在於內存中,數據庫中沒有它的記錄

1、由程序直接new()的

2、持久狀態刪除對象

3、托管狀態刪除對象

1、保存變為持久狀態

2、被JVM回收

持久狀態

Pesistent

存在於內存和數據庫中,而且他們的值完全相同

1、由程序直接讀取數據庫

2、瞬時狀態保存

3、托管狀態更新

1、刪除對象變成瞬時狀態

2、清理session變成托管狀態

托管狀態

Detached

存在於內存和數據庫中,但是內存中的和數據庫中的值除了主鍵相同外,其他信息可能不同

1、持久狀態清理session

1、更新對象變成持久狀態

2、刪除對象變成持久狀態

3、被JVM回收

?

注意:

1、當對象被保存以後,變成持久狀態。如果再對對象進行修改,對象數據就變成內存髒數據,此時再提交事物,HIbernate會將內存數據同步到數據庫中,會調運update方法,即使沒有顯示的調運session.update()方法。

2、當托管狀態下的對象,再次被session管理以後,直接調運update方法就會將數據庫中數據和對象數據同步,對象再次被session管理。

    大小: 30 KB 查看圖片附件

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved