我更新一让数据的浏览次数字段加1........但是有些时候却发现数据库数据是正确的.但是打印出来的却是Hibernate缓存里面的值

解决方案 »

  1.   

    TOaForumArticle test=new TOaForumArticle ();        
    test.setBrowsesum(new Integer(test.getBrowsesum().intValue()+1));
    Transaction ta = null;
    try {
    Session session = HibernateSessionFactory.currentSession();
    ta = session.beginTransaction();
    session.update(test);
    ta.commit();
    returnValue = true;
    } catch (HibernateException e) {
    e.printStackTrace();
            ta.rollback();
    } finally {
    HibernateSessionFactory.closeSession();
    }
            session = HibernateSessionFactory.currentSession();
    Transaction tr=null;
    List list=null;
    try{
        tr=session.beginTransaction();//这里加上clear()即可!!!
    session.clear(); Query query = session
    .createQuery("from TOaForumArticle t order by t.browsesum desc");
    query.setMaxResults(5);
    list=query.list();
    session.flush();
    session.clear();
    tr.commit(); 
    for(Object itm: list)
    {
    log.error(((TOaForumArticle)itm).getBrowsesum()+"浏览数是...........................");
    }
    }catch(Exception ex){
    tr.rollback();
    ex.printStackTrace();
    }
      

  2.   

    先用session.evict(test)这个方法清理一级缓存的,
    然后再用HibernateSessionFactory.evict(test的类.class)清理二级缓存!
    祝你成功!