最近遇到一个问题,两台电脑同时运行程序对同一个oracle数据库进行操作,简称为程序A和程序B
问题出现在数据的更新和展示,两个程序完全相同都是用了spring和hibernate,其中hibernate使用了encache二级缓存,当A程序对数据库进行更新后,B程序无法读取已经更新的数据,直接修改数据库内容B程序依然无法读取最新数据

解决方案 »

  1.   

    这种情况下,ehcache要配置集群关系,以便互相通知更新。
      

  2.   

    但是我现在凡是用到getsession().get()方法获得实体时,数据全是缓存数据,但是其他hibernate方法获得的数据都是最新的...我并没有设置什么关系
      

  3.   

    你问题的焦点是集群下才会出现这样的问题,还是说单机就会出现这样的问题?如果是集群下才会出现,说明你没有配置ehcache的集群关系,所以A节点更新了数据后,B节点并不知道该数据被更新,所以也就不会认为缓存的数据已经失效。如果是单机运行就已经有问题,只能说明你Hibernate配置中,漏了关于缓存失效的策略。
      

  4.   

    其实问题简单来说就是我直接修改数据库的数据,hibernate无法更新最新的数据,在程序中展示出来的依然是老数据,就是这样,不知道怎么弄
      

  5.   

    根据你的需求,你的程序的数据需要很高的实时性,那就不要配置二级缓存了,而且一级缓存也要注意管理好,每次查询完数据后调用session.close()或session.clear()。ps:如果你采用的是懒加载这样做后可能会出错。如果这样到时再给你解决办法
      

  6.   

    或者你可以用spring的Aop做个切面,调用save或update之前先调用session.clear()