一、三種狀態
1、瞬時態(transient)
瞬時態對象沒有唯一標識OID.沒有納入Session的管理.
2、持久態(persistent)
持久化對象有唯一標識OID.已經納入到Session的管理,持久態對象有自動更新數據庫的能力.
3、脫管態(detached)
持久化對象有唯一標識OID,沒有納入到Session管理.
二、三種狀態的相互轉化
(1)瞬時態
獲得:構造對象
瞬時態---->持久態 save方法
瞬時態---->脫管態 設置唯一標識 (OID)
(2)持久態
獲得:get/load/save/iterate方法
持久態---->瞬時態 delete方法
持久態---->脫管態 session的close/clear/evict方法
(3)脫管態
獲得:構造對象,設置唯一標識
脫管態---->瞬時態 設置唯一標識爲null
脫管態---->持久態 update方法
三、Hibernate一級緩存的管理
clear:清空一級緩存的所有對象
evict:清除指定對象
flush:控制sql語句的發出時機
refresh:快照區的數據覆蓋緩存區數據
四、Hibernate一級緩存的刷出時機
session.setHibernateFlushMode()方法可以設置hibernate一級緩存的刷出時機。
* ALWAYS :每次查詢的時候都會刷出.手動調用flush.事務提交的時候.
* AUTO :默認值.有些查詢會刷出.手動調用flush.事務提交的時候.
* COMMIT :在事務提交的時候,手動調用flush的時候.
* MANUAL :只有在手動調用flush纔會刷出.
令:
* update方法每次都會發送sql,可以在class標籤設置select-before-update="true",再更新之前先查詢,如果緩存區數據和快照區數據不一致再更新。
* saveOrUpdate方法可能操作OID不存在的持久化對象,在這時程序會報錯。可以在id標籤設置 unsaved-value="X",當要更新的id不存在時,向數據庫插入一條記錄。