小弟用hibernate写了个账户密码修改查询,再看例子的时候发现在dao层的update段代码以下是update段代码
-------------------
//修改对象
public static void update(User user)
{

try{
session =HibernateUntils.getSession();
tx =session.beginTransaction();
session.update(user);
tx.commit();

}catch(HibernateException e)
{
e.printStackTrace();
SessionClose.close(session, tx);
}
}
----------------------
我在test.class
----------------------
User a = new User("shaw","warpten");
User b = new User("Alice","900518");
User c = new User("Tom","Tom");
User d = new User("Jack","Jack");
User e = new User("Tony","Tony");
User f = new User("Shark","Shark");

// UserDao.save(a);
// UserDao.save(b);
// UserDao.save(c);
// UserDao.save(d);
// UserDao.save(e);

UserDao.update(f);
----------------------------
发现数据库里没有任何变化,请问怎么回事呀,
还有,不如我想User c的密码,该怎么写啊?
还有session.upadte(Object obj)和session.update(String s,Object obj);
请问有什么区别呀  麻烦了!

解决方案 »

  1.   

    你写的update是只能更新一个User对象
    而你测试代码里面的UserDao.update(f);用的参数f是一个刚刚创立的User对象,所以数据库没有任何变化
    你可以先从数据库查询出来一个User然后更新这个User的密码,然后update这个对象
      

  2.   

    这个什么意思?
    User a = new User("shaw","warpten");
    User b = new User("Alice","900518");
    User c = new User("Tom","Tom");
    User d = new User("Jack","Jack");
    User e = new User("Tony","Tony");
    User f = new User("Shark","Shark");// UserDao.save(a);
    // UserDao.save(b);
    // UserDao.save(c);
    // UserDao.save(d);
    // UserDao.save(e);UserDao.update(f);
    这个注释了的是什么意思? 新建的这些对象保存到数据库没(执行SAVE操作)?
    要跟新成功你需要持久化的对象
    比如拿你的这段代码来说,使用以下方式肯定是可以更新成功的
    User a = new User("shaw","warpten");
    session.save(a);
    //这里的save方法会返回一个可序列化对象,这个对象就是你保存到数据库
    //持久化的a(包含了生成的主键);当然如果你的UserDao.save封装的是session.save那么就可
    //以直接使用了
    a.setPassword("newPwd");
    UserDao.save(a); //这里就可以更新了否则你需要知道当前跟新的是那条记录,并且你需要在调用hibernate的update方法前先要或许该更新记录的持久化数据,也就是需要select到这条记录后在进行 update
      

  3.   

    更新,要建立在原来对象上,f是刚new出来的,原来对象是哪个
      

  4.   

    建议:update 写为 先delete 后save