本帖最后由 swit1983 于 2009-06-09 17:41:44 编辑

解决方案 »

  1.   

    肯能我写的太多了,我就简单问下,hibernate在saveOrUpdate方法的时候是怎么判断的对象是否发生过改变的? 一定要是持久化状态才能判断吗? 调用saveOrUpdate方法的时候,对象不是已经变成持久化状态了吗?
      

  2.   

    hibernate判断是insert还是update是根据对象的pkid来判断,如果对象的pkid是null(或0),那么hibernate将执行insert添加新记录,否则是update.对于判断对象是否发生改变,hibernate使用一个version来判断,这似乎跟saveOrUpdate没什么太大关系,这个版本号主要是用来判断内存中的对象是否最新,用以防止数据存储时多方同步操作的数据冲突。通常这个可以由TIMESTAMP,或者是数字来担任。Hibernate会将内存中的对象和数据库中的同pkid的数据相比对,如果version,比如说TIMESTAMP(精确到秒)是一样的,那么Hibernate知道这是一个最新版本的数据,它将存储这个数据,并升级版本号;如果内存中数据的版本号与数据库不符,Hibernate将抛出著名的“rows updated or deleted by another transaction..." 异常,存储失败。不知道回答你的问题没有。