你没有配置二级缓存
在hibernate.cfg.xml中配置
<class-cache class="com.cuangwu.oa.pojo.SysMBLiuChen" usage="read-write" region="default"/>    <class-cache class="com.cuangwu.oa.pojo.SysMBLiuChen.sysMbhuanJies" usage="read-write" region="default"/>

解决方案 »

  1.   

    一级缓存 是基于session的.你的几个页面用的不是一个session,当然会这样了.
      

  2.   

    怎么使不同的请求使用同一个session?
      

  3.   

    .....
    不要让不同的请求使用同一个session
      

  4.   

    为什么"不要让不同的请求使用同一个session"?
    我现在的情况是,同一个页面每次请求都要从数据库中读取数据(只有在一个方法中才不用重新读取),感觉没有发挥hibernate的缓存的作用. 下面是在DAO中的每个方法开始的地方获取session的方法:    /**
         * 取得session对象
         */
        public Session openSession() {
         //getHibernateTemplate().getSessionFactory();
         Session s=SessionFactoryUtils.getSession(getSessionFactory(), false);
         s.setFlushMode(FlushMode.AUTO);
         return s;
            /*
         Session sin = (Session)pSession.get();
         if(sin==null){
         sin =SessionFactoryUtils.getSession(getSessionFactory(), false);
         pSession.set(sin);
         }
         return (Session)sin;
         */
        }
      

  5.   

    楼上不是有人说了吗,配2级缓存,应该是可以满足你的要求的。
    或者用aop拦截dao查询方法结合ehcache自己实现都可以。我没有做过缓存session的尝试,但为了缓存某些数据而这样干,我认为是得不偿失的行为。数据连接的长时间占用,其它session对数据的操作对缓存的这个session的影响,此session缓存的清理都是很麻烦的问题。
    另外,一次缓存也并不是那么好用,只有session.load(),session.createQuery().iterate()才可以享受到一级缓存的好处,而像getHibernateTemplate().find()使用session.createQuery().list()实现,无法利用一级缓存。
      

  6.   

    持久层怎么会是这样?
    我理解的持久层(具体来说)是hibernate把数据库中的记录对象化的保存在内存中,必须时持久对象才与数据库同步,并不是实时的同步呀!
    和我理解的相差太远了.