我要用session.update(sForm)这个方法更新一条记录
sForm是一个对象,但我的数据库中的表里面有多条记录,现在我用这个方法显然数据库不知道我要更新哪条记录
想问问用update()这个方法怎么更新数据库中的一条记录!

解决方案 »

  1.   

    查看对象是什么状态(持久,游离 ,瞬时)     持久和游离根据(id version 等好多标示【hibernate好多标示 我只能看源代码】)和数据库的记录关联,然后进行更新。 瞬时的只能insert
      

  2.   

    这个stuForm是用get方法查到的一条记录,让每个字段的值显示在了表单中!
    然后我点提交的时候跳转到update_action中里面调用更新方法.
    但现在更新不了,下面是代码看看哪出问题了!谢谢!public StuInfoForm loadById(int id) {
    Session session = null;
    Transaction tr = null;
    StuInfoForm sForm = null;
    try {
    session = HibernateUtils.getSession();
    tr = session.beginTransaction();
    sForm = (StuInfoForm) session.get(StuInfoForm.class, id);
    tr.commit();
    } catch (Exception e) {

    }
    return sForm;
    }//更新方法
    public void updateById(StuInfoForm sForm,int id) {
    Session session = null;
    Transaction tr = null;
    try {
    session  = HibernateUtils.getSession();
    tr = session.beginTransaction();
    session.update("sForm", id);//这句写的好像有问题但不知道怎么改!
    tr.commit();
    } catch (Exception e) {
    System.out.println("更新失败");
    tr.rollback();
    e.printStackTrace();
    }finally{
    if(session != null)
    session.close();
    }
    }<% 
         StuInfoForm stuForm = (StuInfoForm)session.getAttribute("stuForm");
         String name = stuForm.getSname();
        
         int sno = stuForm.getSno();
           String sex = stuForm.getSex();
           String phone = stuForm.getPhone();
           String e_mail = stuForm.getE_mail();
           int id = stuForm.getId();
           session.setAttribute("id",id);
        %>
        <form action="update.do" method="get">
         <table border="1" align="center">
         <tr>
         <td>name</td>
         <td><input type="text" name="sname" value="<%=name%>"></td>
         </tr>
         <tr>
         <td>sno</td>
         <td><input type="text" name="sno" value="<%=sno%>"></td>
         </tr>
         <tr>
         <td>sex</td>
         <td><input type="text" name="sex" value="<%=sex%>"></td>
         </tr>
         <tr>
         <td>e_mail</td>
         <td><input type="text" name="e_mail" value="<%=e_mail%>"></td>
         </tr>
         <tr>
         <td>phone</td>
         <td><input type="text" name="phone" value="<%=phone%>"></td>
         </tr>
         <tr>
         <td></td>
         <td><input type="submit" value="确定"><input type="reset" value="重置"></td>
         </tr>
         </table>
        </form>
      

  3.   

    //更新方法 
    public void updateById(StuInfoForm sForm,int id) { 
    Session session = null; 
    Transaction tr = null; 
    try { 
    session  = HibernateUtils.getSession(); 
    tr = session.beginTransaction(); 
    StuInfoForm sif = session.load(StuInfoForm.class,id);
    在这里把需要修改的属性赋值给sif就可以了。
    sif.setName(sForm.getName());
    tr.commit(); 
    } catch (Exception e) { 
    System.out.println("更新失败"); 
    tr.rollback(); 
    e.printStackTrace(); 
    }finally{ 
    if(session != null) 
    session.close(); 


      

  4.   

    session.update("sForm", id);
    我一般是先赋值 然后调用update方法传 sForm 这个对象sForm.setXxx(XXX);
    session.update(sForm);
      

  5.   

    public void update(SubInfoForm form){
        // 连接 事务省略
         session.merge(form);// form在数据库中必须有对应值
    }
      

  6.   

    先得到更新数据的主键即唯一标识,然后将他set到对应对象属性中在执行更新,后台其实就是翻译成SQL语句