hibernate的更新问题

大家帮忙看下这是什么问题.忙了好久了.
我用SSH整合的事例.
现在有个USER表
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
我通过editUser.action在JSP页面拿到了表里面的字段的值.
JSP代码:

/s:form
这里面的值能够正常显示.现在我需要在action中更新name的值.如果我这样写
public String updateUser()
{
roomDAO.updateUser(getUser());
return "updateUser";
}
是没有什么问题的.数据库可以更新过来.
现在我想把它加载上来再更新.因为里面的有些字段跟别的表有关联.
我把代码改成这样:
public String updateUser()
{
user = roomDAO.loadUser(getUser(), getUser().getId());
System.out.println(user.getName());
user.setName(getUser().getName());
roomDAO.updateUser(user);
return "updateUser";
}
就是先把这个USER LOAD上来再更新.
可是发出了SQL语句,但数据库中的数据却没有更新.
Hibernate: select user0_.id as id2_0_, user0_.name as name2_0_ from user user0_ where user0_.id=?
ssss
Hibernate: update user set name=? where id=?

大家看看这样写能行吗.或者User.hbm.xml文件需要做哪些配置:








帮忙看下.谢谢!!!.
[b]问题补充:[/b]
DAO实现类中的代码:
public User loadUser(User user, int id)
{
user = (User)this.getSession().load(User.class, id);
return user;
}
只是把它加载上来
[b]问题补充:[/b]
跟据打印的结果user应该是取到值了.
[b]问题补充:[/b]
我拿到user后再setName值再update这样不行吗?那应该怎么实现才可以啊.谢谢!
[b]问题补充:[/b]
嗯.是啊.我用的是struts2.传过来的值是没有问题的.我之前有打印出来了.就是更新的时候不对.很郁闷..
[b]问题补充:[/b]
public void updateUser(User user)
{
this.getSession().update(user);
}
这个方法只是更新
[b]问题补充:[/b]
1000有在上QQ吗.我上给你看下会更方便.谢谢了.
[b]问题补充:[/b]
找到原因了.是这样的.
public String updateUser()
{
String name = this.getUser().getName();
user = roomDAO.loadUser(user, getUser().getId());

    System.out.println(user.getName());
    System.out.println(this.getUser().getName());

    user.setName(name);
    roomDAO.updateUser(user);
    return "updateUser";
}

打印出来的结果是这样的.
ddddd
fffff
fffff

我原先里面的值是fffff.user在LOAD之前打印出来的name是我修改的.而在load完后又变成原先对象的name值了.
终于解决了.谢谢你了.
[b]问题补充:[/b]
前面忘了写了,第一行是name的值.

5个回答

System.out.println(user.getName());
System.out.println(user.Id());
这两个都能打出吗
this.getSession().update(user);

贴出dao的代码看看,你跟踪一下值都获取到了吗

public String updateUser()
{
user = roomDAO.loadUser(getUser(), getUser().getId());
System.out.println(user.getName());
user.setName(getUser().getName());
roomDAO.updateUser(user);
return "updateUser";
}

你代码是这么写的 roomDAO.updateUser(user); 这句话你觉得对吗?

user.setName();//你前台传过来的值直接放里就行了啊。
你用的是struts2?
roomDAO.updateUser(user);

把roomDAO.updateUser(user); 方法贴出来看下

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问