日期:2014-05-20  浏览次数:20723 次

使用 Hibernate 的 update()方法出现奇怪的问题
DAO中,我写了个 update 方法 如下:
Java code
/**
     * 自己写的更新记录函数
     */
    public boolean UpdateOperatorInfo(OperatorInfo operatorinfo){
        boolean b=false;
        Session session=(Session) this.getSession();
        Transaction tron=session.beginTransaction();
        try{
            OperatorInfo opinfo=new OperatorInfo();
            session.load(opinfo, operatorinfo.getOperatorId());
            opinfo.setOperatorName(operatorinfo.getOperatorName());
            opinfo.setOperatorPwd(operatorinfo.getOperatorPwd());
            opinfo.setIsAdmin(operatorinfo.getIsAdmin());
            session.update(opinfo);
            //session.flush();
            tron.commit();
            b=true;
        }catch(HibernateException e){
            if(tron!=null){
                tron.rollback();
                e.printStackTrace();
                
            }
        }finally{
            session.close();
        }
        return b;
    }


然后我在jsp页面中调用 更新数据库中的 operator表

jsp页面的代码如下:

Java code
<%@ page language="java"  pageEncoding="utf-8" import="pojo.OperatorInfo,pojo.OperatorInfoDAO,java.util.Iterator"%>
<%request.setCharacterEncoding("utf-8"); %>

<%
    String s_id=request.getParameter("id"); 
    String name=request.getParameter("name");
    String pwd=request.getParameter("pwd");
    String isno=request.getParameter("isno");
    
    name=name.trim();
    pwd=pwd.trim();
    isno=isno.trim();
    
    
    OperatorInfoDAO opdao=new OperatorInfoDAO();
    OperatorInfo opinfo=new OperatorInfo();
    
    opinfo.setOperatorId(Integer.parseInt(s_id));
    opinfo.setIsAdmin(isno);
    opinfo.setOperatorName(name);
    opinfo.setOperatorPwd(pwd);
    
    //out.println(opinfo.getOperatorId());
    if(opdao.UpdateOperatorInfo(opinfo)){
        response.sendRedirect("addoperator.jsp");
    }else{
        out.println("你必须手动刷新一下本页才能更新成功,为什么,我也不知道");
    }
    
    //opdao.attachDirty(opinfo);
    //response.sendRedirect("addoperator.jsp");
    
%>


问题出来了,点击更新之后,首先显示更新失败,然后 你手动刷新几下网页,才能更新成功。 每次都得刷新几下才行,我的电脑不关机,你可以访问我的电脑运行一下看看,到底是怎么回事,我用的 TOMCAT 5.5 MSSQL2000
访问我电脑的地址是:http://www.cao123.cn:8080/cn_mobile/addoperator.jsp

进去之后,点 更新 查看病灶。删除倒是正常,就是那个更新操作,真郁闷了,请求大家帮助下,谢谢! 明天过来重谢!


------解决方案--------------------
1,更新失败的异常是什么?
2,就更新操作的话,搞不懂为什么要先从数据库中取出数据,封装成对象,更新对象的属性,再持久化到数据库 呢?一条简单的SQL并且只操作一次数据库不就搞定了呀..我不太明白.

------解决方案--------------------
session.flush()
是需要执行的。
------解决方案--------------------
加载延时问题.网上找找.有相应的办法.或打我qq:427731398