1. 程式人生 > >Hibernate持久化物件的三種狀態

Hibernate持久化物件的三種狀態

new出來的物件如Student stu = new Student(),就是瞬時物件,它在記憶體中孤立存在,它的意義是攜帶資訊的載體,不和資料庫的資料有任何關聯。通過Sessionsave()saveOrUpdate()方法可以把一個瞬時物件與資料庫相關聯,並把瞬時物件攜帶的資訊通過配置檔案所做的對映插入到資料庫中,這個瞬時物件就轉化成了持久物件(使用get(),load()等方法查詢到的資料物件,一出場就是持久物件),並擁有和資料庫記錄相同的id標識(Hibernate自動將id值賦予它)。如果這時候使用delete()方法,它就會變回瞬時物件,刪除了資料庫與這個物件關聯的記錄,物件與資料庫不再有任何的關聯。當一個
Session指定close()clear(),evict()之後,持久物件就變成脫管物件,這時物件的id雖然擁有資料庫識別值,但他們目前並不在Hibernate持久層的管理下,它與瞬時物件的本質是相同的,只不過比瞬時物件多了資料標識的id值。脫管物件的引用依然有效,物件可以繼續被修改,當它重新被關聯到某個新的Session上時,會再次變成持久物件(脫管狀態期間的改動將被持久化到資料庫上)。脫管物件擁有資料庫識別值id,所以它可以通過update(),saveOrUpdate(),lock()等方法,再度與持久層關聯。