updateUser.jsp页面代码如下:  <body>
    <center>
      <h2><font color="green">修改用户页面</font></h2><br/>
      
      <s:form action="updateUser.action" method="post">
      <s:hidden name="user.id" value="%{user.id}"></s:hidden>
      <s:textfield name="user.name" value="%{user.name}" label="姓名"></s:textfield><br/>
      <s:textfield name="user.password" value="%{user.password}" label="密码"></s:textfield><br/>
        <s:textfield name="user.age" value="%{user.age}" label="年龄"></s:textfield><br/> 
        <s:submit value="修改"/>
      </s:form>
    </center>
  </body>
UserAction.jave中的updateUser()方法如下:public String updatePUser() {
// 根据用户id查询相关信息
System.out.println("要删除的用户的id为:"+user.getId());
user = userService.findUserById(user);
return "success";
}
最后是实现的代码 public boolean updateUser(UserBean user) {
session.beginTransaction();
//第一种方法
/*UserBean user2=(UserBean)session.load(UserBean.class,user.getId());
user2.setName(user.getName());
user2.setPassword(user.getPassword());
user2.setAge(user.getAge());
session.update(user2);*/

//第二种方法
session.update(user);
System.out.println("修改用户成功!");
session.getTransaction().commit();
return true;
}(问题:第一种方法可以修改。。感觉麻烦,,第二种方法。出现错误:  求解?)
错误信息如下:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.chengge.bean.UserBean#11]
org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:613)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:307)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:56)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:591)
org.hibernate.impl.SessionImpl.update(SessionImpl.java:579)
org.hibernate.impl.SessionImpl.update(SessionImpl.java:571)

解决方案 »

  1.   


    UserBean.java类如下:package com.chengge.bean;public class UserBean { private int id;
    private String name;
    private String password;
    private String age;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    public String getAge() {
    return age;
    }
    public void setAge(String age) {
    this.age = age;
    }
    public UserBean(int id, String name, String password, String age) { this.id = id;
    this.name = name;
    this.password = password;
    this.age = age;
    }
    public UserBean(){

    }

    }UserAction.java类如下:package com.chengge.action;import java.util.List;
    import java.util.Map;import org.apache.struts2.ServletActionContext;import com.chengge.bean.UserBean;
    import com.chengge.service.UserService;
    import com.chengge.service.impl.UserServiceImpl;public class UserAction { private UserBean user; private List<UserBean> userList; public List<UserBean> getUserList() {
    return userList;
    } public void setUserList(List<UserBean> userList) {
    this.userList = userList;
    } public UserService getUserService() {
    return userService;
    } public void setUserService(UserService userService) {
    this.userService = userService;
    } private UserService userService = new UserServiceImpl(); public UserBean getUser() {
    return user;
    } public void setUser(UserBean user) {
    this.user = user;
    } public String addUser() {
    // 保存用户数据
    this.userService.addUser(user);
    return "success";
    } public String userList() {
    // 获得用户列表
    userList = this.userService.findAllUser();
    Map request = (Map) ServletActionContext.getContext().get("request");
    request.put("userList", userList);
    return "success";
    } public String deleteUser() {
    // 删除用户
    if (userService.deleteUser(user)) {
    return "success";
    }
    return "input";
    } public String updatePUser() {
    // 根据用户id查询相关信息
    System.out.println("要删除的用户的id为:"+user.getId());
    user = userService.findUserById(user);
    return "success";
    } public String updateUser() {
    // 修改用户信息
    System.out.println("修改用户的id为:"+user.getId());
    if (userService.updateUser(user)) {
    return "success";
    }
    return "input";
    }}
      

  2.   


     //第一种方法
            /*UserBean user2=(UserBean)session.load(UserBean.class,user.getId());
            user2.setName(user.getName());
            user2.setPassword(user.getPassword());
            user2.setAge(user.getAge());
            session.update(user2);*/
            
            //第二种方法
            user2.setName(user.getName());
            user2.setPassword(user.getPassword());
            user2.setAge(user.getAge());
            System.out.println("修改用户成功!");
            session.getTransaction().commit();
            return true;我只知道这样可以 
    而且你的  updatePUser() findUserById(user)-->这里为什么是个user 不是 id?