beckham0207 2010-09-26 09:21
浏览 282
已采纳

应用spring aop遇到的hibernate问题

系统应用spring aop来记录数据的修改记录,也就是记录系统的update操作。
需要记录操作前和操作后的变化 newEntity和oldEntity
我的做法是写了一个拦截器 如下:
[code="java"]
public class LogAdvice implements MethodBeforeAdvice {

public void before(Method method, Object[] args, Object target)
        throws Throwable {

}
[/code]

方法中的第二个参数就是在update操作前的数据,也就是newEntity,那么此时我还需要从数据库中取得oldEntity,
问题就出在这里,因为系统配置了延迟加载,openSessionInView,所以在request还没有完成之前,还是同一个session范围内,那我要用newEntity的id取数据的话,hibernate首先是从session缓存中取,此时session缓存中正好有一个newEntity,所以取到的数据其实还是newEntity,无法取到数据库中的值。

这个问题不知道哪位大虾遇到过或是有什么好的解决办法吗?

  • 写回答

4条回答 默认 最新

  • lizhiyezi 2010-09-26 09:40
    关注

    在查询之前清理session缓存。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥200 GitHub开源程序配置在VScode调试