相关代码如下:List list=null;
Session session=this.getHibernateTemplate().getSessionFactory().openSession();
Transaction ts;
try{
ts=session.beginTransaction();
String sql="sql查询语句";
list=(List)this.getHibernateTemplate().find(sql);
ts.commit();
return list;
}
           catch (RuntimeException re) { 
            return null;
        }finally{
         session.flush();
         session.close();
        }结果与数据库中的不一样,出来的与数据库中的实时记录不一样(我在数据库中手动删除一部份记录)。怎么回事呀?Hibernate和spring相关的配置文件反复检查了也没有发现什么问题

解决方案 »

  1.   

    有缓存数据!
    如果你第一次select了,二级缓存会保留数据的!
      

  2.   

    第二次直接从缓存中读取数据,加快速度
    这个是hibernate的优化.hibernate.cache.use_query_cache=false
      

  3.   

    缓存的问题
    list=(List)this.getHibernateTemplate().find(sql); 
    在这个前面用session.clear()试试
      

  4.   

    谢谢大家,楼上的session.clear()也试了,还是不行。结果我把电脑重启了一次,又完全正确了,能实时与数据同步。真是郁闷,怎么还会有这种事呀?
      

  5.   

    hibernate有缓存机制,第一次读取都加载到缓存里,页面直接从缓存获取数据,这样提高了页面访问速度,但是同样也影响了数据的同步。
    不过不明白你既然使用了spring为什么又返回来用hibernate,一般情况下直接用getHibernateTemplate().load或者find查询就行,除非有特别需要才通过session。通过spring管理session,使用getHibernateTemplate()查询好像这种问题不太容易出现