牛骨文教育服务平台(让学习变的简单)
博文笔记

Hibernate获取当前Session,Hibernate清空当前Session的缓存

创建时间:2016-12-21 投稿人: 浏览次数:970

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)

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。