首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Hibernate获取当前Session,Hibernate清空当前Session的缓存

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

作者头像
qubianzhong
发布于 2018-09-19 13:35:30
发布于 2018-09-19 13:35:30
3K0
举报
文章被收录于专栏:行者常至行者常至

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)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年12月21日,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • sessionFactory.getCurrentSession()
  • sessionFactory.getCurrentSession().evict(object)
    • 其中,sqlSessionFactory,是通过spring注入的。
    • 先从网上盗张图,来看下Hibernate的三种状态以及生命周期。
    • 需求情景:
  • sessionFactory.getCurrentSession().evict(object)
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档