Hibernate的对象有3种状态,分别为:瞬时态(Transient)、
持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence
Object),瞬时对象和脱管对象也称为VO(Value Object)。
save和saveOrUpdate的区别,估计大家都比较了解
save是保存要持久化的数据,会走insert语句
saveOrUpdate是根据unsave-value的设定,判定是要save还是update操作
今天,做项目碰到一个问题,我在service层中的一个函数中对一个实体batch(批次)进行一次save然后进行数据处理,最后又调用了一次update方法用于更新batch的状态,即添加时状态为“0”,数据处理后更新状态为“1”,此时出现
a different object with the same identifier value was already associated with the session异常,它的意思是在一个操作里有了两个同样的标示符,分析后认为update时数据需为po,但save后batch变为了vo状态,此时update时导致此异常,后来在update前先get一下batch然后update是没问题的,但是这样有导致多走了一次select语句,因为batch与数据库是一直的(因为刚刚save),所以就想如何让其insert后仍然处于po状态,后来看到资料使用了saveOrUpdate方法,测试后发现,没有问题,不再出异常,所以认为save和
saveOrUpdate除了在运行机制上有区别以外,在insert以后,save后的实体处于vo状态,而通过saveOrUpdate后的实体 处于po状态,可以修改实体后直接调用update方法,执行更新操作
分享到:
相关推荐
saveOrUpdate
Hibernate merge、update与saveOrUpdate方法的区别
在Hibernate中,最核心的概念就是对PO的状态管理。
hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思。我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原因。 假如两个实体之间有关系(例如employee表和...
我身边的朋友经常会分不清save、saveOrUpdate、update的区别,lock、merge、replicate、refresh、evict甚至不知道是干什么用的。而且关于实体对象的生命周期也有很多概念不清,分不清transient、persistent、...
Hibernate 难点解析: hibernate中uuid和native的相关总结 Hibernate get与load的区别 hibernate二级缓存中list和iterator的用法 Hibernate中的对象有三种状态: lock和update区别 save 和...update 和saveOrUpdate区别
05_传智播客hibernate教程_实体对象的三种状态与saveOrUpdate方法
博文链接:https://log-cd.iteye.com/blog/205166
//该方法将到classpath下解析hibernate.cfg.xml中的配置,如果不用Hibernate默认的配置文件名和路径,可在该方法中指定Hibernate配置文件的名称和路径 2.用Configuration对象获取SessionFactory和Session对象:...
Hibernate持久层方法汇总 session.load, session.find, session.iterator, session.save, session.update, session.saveorupdate
8.4.1 Session的save()和persist()方法 8.4.2 Session的load()和get()方法 8.4.3 Session的update()方法 8.4.4 Session的saveOrUpdate()方法 8.4.5 Session的merge()方法 8.4.6 Session的delete()方法 ...
传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|load|persist方法 05_实体对象的三种状态...
8.4.1 Session的save()和persist()方法 191 8.4.2 Session的load()和get()方法 194 8.4.3 Session的update()方法 195 8.4.4 Session的saveOrUpdate()方法 197 8.4.5 Session的merge()方法 198 8.4.6 Session的...
Spring提供了org.springframework.orm.hibernate3.HibernateTemplate类和org.springframework.orm.hibernate3.HibernateCallback接口来方便和Hibernate整合。 HibernateTemplate类封装了Hibernate的主要类,它提供了...
HibernateTemplate.saveOrUpdate时出现\xE7\x84十六进制之类的字符串,连接数据库字符串,数据库字符集,汉字乱码的问题集合,还有我熬3夜的血泪经历
两种配置文件: A.hibernate.cfg.xml 和 B.hibernate.properties A中可含映射文件的配置,而B中hard codes加映射文件。 A。Configuration config=new Configuration().config(); B. ...