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..." 异常,存储失败。不知道回答你的问题没有。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货