提交事务的确是吧 缓存的提交到数据库了 但是 如果数据被别的系统该过了又该如何到我的缓存呢?
我现在的问题就是当我的数据被别的系统改过了 我当前的系统 取得的数据还是旧的 
我现在不得已 在每次 实例化dao的时候都调用 ××dao.initialize() 不知道这样对不对
也就是 _RootDAO.initialize()

解决方案 »

  1.   

    不是缓存的问题吧,用version试试看。
      

  2.   

    iwillrockyou  能具体点吗 谢谢
      

  3.   

    createQuery() 来取你是设了2级缓存吧对于一些对外部系统开放的数据库,不要使用缓存  
    只有一些运行期间  几乎不怎么变动  而且访问频繁的对象使用缓存
      

  4.   

    你说的这个应该是乐观死锁,这里又篇文章应该可以帮你http://www.djyeh.com/post/892.html
      

  5.   

    用的是load或者是get?
    当配置文件中,lazy="false"
    load方法会先找一级缓存(session),如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,就到二级缓存找去找,如果找到返回对象,如果在这里都还没找到,这时才会进入数据库查找,找到返回对象,没有找到返回一个异常。
    get方法同样先找一级缓存,如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,直接访问数据库进行查询,找到返回对象,没有返回null当配置文件中,lazy="true"
    load方法会先找一级缓存(session),如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,返回代理的对象
    get方法同样先找一级缓存,如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,直接访问数据库进行查询,找到返回对象,没有返回null我是这么认为,说得不对的地方还请大家指点
      

  6.   

    关于 gougou8180  我用的就是 createQuery()   来取 
    还有就是 我该如何关闭缓存 我用的是 eclipse + hibernatesync 来开发的关于 lxd86  
    不论 lazy="true" or lazy="false" 如果一个在缓存中的数据 在别的系统中被修改了某字段的数据 那么取得的还是缓存中的数据 问题似乎还没有解决
    关于 zk11231002 
    我还不是很清楚 这个version到底该如何用 如果两个系统一个使用了hibernate 一个使用了 jdbc or odbc 直连 这个version还有用吗?
      

  7.   

    hibernate的二级缓存
    如果开启了二级缓存,hibernate在执行任何一次查询的之后,都会把得到的结果集放到缓存中,缓存结构可以看作是一个hash table,key是数据库记录的id,value是id对应的pojo对象。当用户根据id查询对象的时候(load、iterator方法),会首先在缓存中查找,如果没有找到再发起数据库查询。但是如果使用hql发起查询(find, query方法)则不会利用二级缓存,而是直接从数据库获得数据,但是它会把得到的数据放到二级缓存备用。也就是说,基于hql的查询,对二级缓存是只写不读的。
      

  8.   

    关于 yirentianran  我现在的问题是
    我的系统叫A使用 hibernate 连接 mysql 5 的数据库 叫B
    此时 A 调用方法初始化  _RootDAO.initialize()之后
    其他系统 C 使用任何连接数据库的方式 修改了 B中某数据表bbb的某行数据
    之后 当A  调用方法
     bbbDAO bbbdao = new bbbDAO();
     String querystring = "from bbb where bbbid = '"+ bbbid + "' "; 
      

  9.   

    Query bbbQuery = bbbdao.getQuery(querystring,bbbdao.getSession());
    List<bbb> listbbb = bbbQuery.list();那么通过这样的方法 
    取回的list里面的数据还是C修改B前的那个值我在这些操作中哪里出了问题
      

  10.   

    public Query getQuery(String queryStr, Session s) {
    return s.createQuery(queryStr);
    }
    这是 getQuery 的方法
      

  11.   

    你把你的浏览器的 临时文件跟Cookies删了在重起服务器看看是不是还是同样结果,要是同样结果,一般都是你代码有问题!
      

  12.   

    重启服务 肯定是好了咯
    我只要每次在查询之前 _RootDAO.initialize()  那么不会出现那样的问题 但是 似乎这样服务器搞不了多久后就歇菜了