zzxll5566 2009-08-14 13:49
浏览 229
已采纳

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条回答 默认 最新

  • ghost1000 2009-08-14 14:52
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog