一、 Hibernate對象的狀態
實體對象的三種狀態:
1) 暫態(瞬時態)(Transient)---實體在內存中的自由存在,它與數據庫的記錄無關。
po在DB中無記錄(無副本),po和session無關(手工管理同步)
如:Customer customer = new Customer(); customer.setName("eric");
這裏的customer對象與數據庫中的數據沒有任何關聯
2) 持久態(Persistent)---實體對象處於Hibernate框架的管理中。
po在DB中有記錄,和session有關(session自動管理同步)
3)遊離態(脫管態)(Detached)
處於Persistent狀態的實體對象,其對應的Session實例關閉之後,那麼,此對象處於Detached狀態。
po在DB中有記錄,和session無關(手工管理同步)
無名態:po處於遊離態時被垃圾回收了。沒有正本,只有DB中的副本。
po處於暫態時被垃圾回收了,則死亡。(唯一可以死亡的狀態)
實質上,這三個狀態是:持久對象的正副本與同步的關係
原則:儘量使用持久態。
暫態--->持久態
A.調用Session接口上的get()、load()方法
B.調用Session接口上的save()、saveOrUpdate()方法
持久態--->暫態
delete();
遊離態--->持久態
update()、saveOrUpdate()、lock();
(lock不建議用,危險;肯定沒變化時用,有則用updata)