刚学习JAVA开发,使用hibernate+struts,数据库是sql server。
查询方法是:
public List findAll() {
log.debug("finding all BlogSysInfo instances");
try {
String queryString = "from BlogSysInfo";
Query queryObject = getSession().createQuery(queryString);
return queryObject.list();
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}action方法是:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
BlogSysInfoDAO dao = new BlogSysInfoDAO();
List list= dao.findAll();
BlogSysInfo Sysinfo = (BlogSysInfo)list.get(0);;
request.getSession().setAttribute("SysInfo", Sysinfo);
return mapping.findForward("Head");
}可是查询结果没有根据数据库数据改变更新。库中有一个字段是SysName,第一次值为cczdiso,查询结果显示为cczdiso,当我在sql server控制窗口中将值改为disoccz后结果显示为disoccz,可再将数据改变后,结构还是显示disoccz。请高手帮忙解决

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主截止到2008-06-21 03:51:55的汇总数据:
    注册日期:2007-10-24
    上次登录:2008-6-21
    发帖数:1                  发帖分:20                 
    结贴数:0                  结贴分:0                  
    结贴率:0.00 %        结分率:0.00 %        
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    BlogSysInfo Sysinfo = (BlogSysInfo)list.get(0);; 你每次只拿第一个数据,你的数据库只有一个数据吗??
      

  3.   

    LIST 你给JSP传的时候 好像要转。。
    我以前碰到过类似问题 
    不过要给你说也很麻烦饿。。呵呵 
      

  4.   

    可能List没有覆盖BlogSysInfo Sysinfo = (BlogSysInfo)list.get(0);后面加
    list.remove(0);
    试试
      

  5.   

    无关吧
    是他session的问题觉得
    没有把新的list覆盖原来的
    你print下list里面的内容试试
      

  6.   

    如果是你东改的可能是HIBERNATE的缓存没有同步吧,所以现session.flush()同步下在取值试试。
      

  7.   

    你把hibernate的lazy舍成false看看 他如果是延迟加载 ,那么很可能就是没有值的 因为你并没有直接访问他查询的属性它的不会去查询的
      

  8.   

    你把session commit了以后在查询一下试试。
      

  9.   

    应该是hibernate的一级缓存问题吧,你第一次查的时候数据已经在session的缓存中了,由于你的数据是在db中直接改的,所以hibernate不会在去查询db了,直接在缓存中取值。建议一下:要么查询执行完一次就把session关了,要么查询完得到你要的数据后,用session.evict(Object obj)把数据从session中清除,要么用session.clear()
      

  10.   

    你在数据库中直接改?为什么不update,还有就是需要重启下数据库服务和web应用服务器吧
      

  11.   

    A;BlogSysInfo Sysinfo = (BlogSysInfo)list.get(0);
    楼主你的数据库里是不是只有一条记录啊
    B 注意关你的Sesssion,按道理说这跟session是没有关系的,因为hibernate每次查询的时候都会将缓存里的数据与数据库里对比
      

  12.   

    可能是以下原因:
    1、调用历史记录
    解决如下:
    清空IE历史记录,然后在execute方法中加入,用来禁止缓存response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    response.setDateHeader ("Expires", 0);2、始终显示list中第一条记录,所以改其他记录第一条记录不变
      

  13.   

    可能是你的session没有关闭,所以一直拿缓存里东西,你更新完session后就关闭试试