我用hibernate写了段返回BranchForm表中所有记录的代码:
 public List myQuery(){ 
 Session session=sessionFactory.openSession();
        String hql="from BranchForm";
        List list = null;
        try{
            Query query=session.createQuery(hql);
            list=query.list();
           }catch(Exception e){
            System.out.print("查询时的错误信息:"+e.getMessage());
        }finally{
            session.close();
        }
        return list;
}
在页面上显示正常,(假设有3条记录)
但当我到数据库中手动删除一条记录后,再次打开页面,发现页面上仍然是3条记录
只有当服务器重启后,才显示2条 ,不知怎么回事

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【udk007】截止到2008-06-30 15:26:37的历史汇总数据(不包括此帖):
    发帖数:14                 发帖分:180                
    结贴数:12                 结贴分:160                
    未结数:2                  未结分:20                 
    结贴率:85.71 %            结分率:88.89 %            
    楼主加油
      

  2.   

    肯定了,为了节省开销,一般不会每次都去查数据库的。系统把数据保存在缓存里了。
    在实际中很少发生手动去删除数据的情况的。
    那样需要很高的权限,不需要程序员去考虑的 。你要做的就是在插入更新删除后将相关的表重新select到内存中或者javabean中。
    防止使用过期的数据就行了。
      

  3.   


    正解可以设置hibernate缓存时间
      

  4.   

    我把代码改成如下:
    public List myQuery(){ 
    Session session=sessionFactory.openSession(); 
            String hql="from BranchForm"; 
            List list = null; 
            try{ 
                Query query=session.createQuery(hql); 
                list=query.list(); 
              }catch(Exception e){ 
                System.out.print("查询时的错误信息:"+e.getMessage()); 
            }finally{ 
                session.clear();//加了这句 清空缓存
                session.close(); 
            } 
            return list; 

    发现根本不起作用
    不知道3楼所说的  系统把数据保存在缓存里了  是保存在哪里了啊
      

  5.   

    有人已经说了啊,你怎么不听呢?
    用事务处理嘛commit()一下就行了啊