1、瞬時對象(Transient Objects):
使用new操作符初始化的對象不是立刻持久的。的狀態是瞬時的,也就說沒有和任何數據庫表進行關聯。只要應用不再引用這對象,他的狀態將丟失,並且由垃圾回收機制回收。數據庫中沒有此對象,只是存在內存中。
2、持久對象(Persist Objects):持久對象是具有數據庫標識的,也就是從數據庫獲取來的。他有持久化管理器Session統一管理,持久實例實在事務中進行操作--當事務結束他的狀態與數據庫同步,可以這樣理解當我們在對象處於Persist 狀態時候我們對對象的改變將會同步道數據庫中,其原理是當事務提交時刻,提供執行SQL的i(DML)nsert 、update、delete語句把內存中的狀態同步到數據庫中。
3、脫管對象、遊離狀態(Detached Objects):Session關閉之後,持久化對象變成離線對象,離線對象就不能同數據庫同步,也不再受Hibernate管理。此時數據庫中還存在這個對象,只是沒有納入Session管理。
eclipse 生成DAO代碼與狀態的關係:
1.saveOrUpdate(Instance) 操作臨時、脫管對象,然後對象變成持久狀態
2. lock(detachedInstance) 操作乾淨的脫管狀態對象,然後對象變成持久狀態
3. merge(detachedInstance) 操作脫管狀態對象,然後對象變成持久狀態
4. attachDirty(instance) 操作不乾淨的臨時、遊離對象
5. attachClean(detachedInstance)操作髒脫管對象