现在又一个类User,里面有三个属性id,username,password。对应的数据库中表user_tb,表中有两条数据分别是:1,zhang,zhang和2,li,li。
为什么以下操作也会对数据库进行修改啊?
User user=new User();
user.setId(1);
user.setUsername("zhang");
user.setPassword("zhang111");
session.update(user);
执行完以上方法之后,数据库中的记录变为1,zhang,zhang111和2,li,li。
用new创建一个对象后不是瞬时状态的吗?怎么也会对数据库又影响啊。
难道除了用save()或saveorupdate()方法和用hibernate加载后对象变为持久状态,直接用update方法更新一个瞬时对象也会对数据库有影响吗?

解决方案 »

  1.   

    首先你没有搞清楚对象的三种状态,
    User user=new User(); 
    user.setId(1); 
    user.setUsername("zhang"); 
    user.setPassword("zhang111"); 你创建的对象属于游离对象,而不是瞬时对象。以面我把三种状态的特点说一下:
    1.瞬时状态:这时的对象不受session的管理,并且对象的OID在DB中没有对应的记录。也就是对象的id在数据库中找不到相应的记录
    2.持久状态:这时的对象受sesison的管理,且对象的OID在DB中有对应的记录。
    3.游离状态:这时的对象不受session的管理,且对象的OID在DB中有对应的记录。如果把这三种状态搞清楚了,你的问题应该会想清楚的。
      

  2.   

    Hibernate Session的update()方法使一个游离对象转变为持久化对象.
    所以数据会被保存的!!!
      

  3.   


    hibrenate 确定数据是不是持久状态是跟据 主健id 来的
      

  4.   

    晕,把代码贴全了,看你这部分代码当然是瞬时状态,但你若果代码开始有个session呢。。
      

  5.   

    我记得这样好像是要出错的吧 update这样用会抛出异常的 merge可以这样用的
      

  6.   


    开始没有session,这就是方法体了啊 没有其他的了
      

  7.   


    是的,如果ID在数据库中不存在就是顺时状态了。调用update调用出错,调用save就会执行insert语句。好多多结论可以做个简单的测试就有了答案。