选择一条数据进行更新操作,数据库可以更新成功,但页面上显示的有时候与数据库一致,有时候不一致,不知道什么原因
查资料是缓存原因,但不知道要怎么改呢,我每个增删改查都有在自己的事务内处理,每次操作完都会关SESSION的

解决方案 »

  1.   

    session在关闭之前的get或者load操作会产生不一致情况,因为会读取一级缓存
    而如果是list,那不会出现不一致(除非你设置了二级缓存)看你的代码是怎么写的了。强制刷出数据,可以用session.refesh(),但是不推荐这样
      

  2.   

    不知道为什么,我在增删改查的每个自己的事务里最后都有关闭session
    有问题的情况是,用load方法,没有关闭session改掉后,用get 方法 ,关闭session测试了几次好像问题解决了
    不知道是什么原因
      

  3.   

    具体问题可能是懒加载的问题引起的,
    修复方法,
    可以更改成立即加载;
    或者
    session.flush();
    session.close();
    关闭前flush(),他是刷新缓存,并且能够强制缓存与数据库同步更新;
      

  4.   

    哦,如果不显示的调用flush()方法,close()方法的时候不是会先调用flush()方法的吗?然后再去 close()的吗
      

  5.   

    flush会在事务提交的时候被自动调用,其他的时候就没那么智能了
      

  6.   


    对呀,那既然是提交的时候会自动调用,那么我们就不用显示的调用了啊,但如果是这样,那还要这个flush方法有什么用呢
      

  7.   

    有两种情况,在hibernate中配置autocommit
    autocommit=true 说明允许自动提交,但是在调用save等方法后,也不会同步到数据库,必须再调用flush方法
    autocommit=false 说明必须显示的提交事务,这时即使调用了flush方法,也不会同步到数据库,必须commit
      

  8.   

    load 得到的是代理对象 get得到的是实体对象