1. 程式人生 > >Hibernate獲取當前Session,Hibernate清空當前Session的快取

Hibernate獲取當前Session,Hibernate清空當前Session的快取

sessionFactory.getCurrentSession()

sessionFactory.getCurrentSession().evict(object)

其中,sqlSessionFactory,是通過spring注入的。

先從網上盜張圖,來看下Hibernate的三種狀態以及生命週期。

這裡寫圖片描述

需求情景:

每次update時,都要記錄更新了什麼欄位,由什麼值更新為什麼值。所以使用的是Aop,在@around方法中,joinPoint.proceed()之前,運用方法的反射查詢下資料庫得到objectOld;joinPoint.proceed()之後,再運用方法反射查詢下資料庫得到objectNew。但是,因為每次update之前都會get一個model,因為get()方法得到的是 持久化狀態 。所以這樣就不容易得到update之前的值。我的做法是,在joinPoint.proceed()之前,運用方法的反射查詢下資料庫得到objectNew,因為此時對model的修改,已經跟進到了持久化狀態;然後執行evict()方法,將objectNew轉換到遊離狀態;然後再運用方法反射查詢下資料庫得到objectOld,再執行evict()將objectOld轉換到遊離狀態。不然的話,會報同一個session裡包含兩個同一標識的不同model的異常。

sessionFactory.getCurrentSession().evict(object)