hibernate中 saveorupdate(),save(),update(),merge()你是怎么看待的;

接触到mybatis竟然有把hibernate抛弃的想法。

言归正传,贴图为先。hibernate的三种状态位和切换之间对函数的使用;

总结下saveorupdate(),save(),update(),merge()这几个函数;

save(),update():都是很好理解的

save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录。

update()就是更新数据库中的记录;

merge()就非常奇葩:

1.如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象的状态覆盖旧有的持久实例;

2.如果session没有相应的持久实例,则尝试从数据库中加载,或创建新的持久化实例;

3.最后返回该持久实例;

4.用户给出的这个对象没有被关联到session上,它依旧是脱管的;

merge()参考:http://blog.csdn.net/lang_man_xing/article/details/7572964

saveorupdate():可以上面的图片这里的一句话。更深度的理解就是Java面向对象是方方面面的。

临时对象,也就是不在Session里边,没有持久化标识,数据库中也没有对应的这个数据的记录,此时才能用save;

持久化对象,在Session里边的,拥有持久化标识OID,此时的数据的内容只要修改,(ID)不能变,会引起数据此对象和数据库的联动,

这是Hibernate通过同步来实现的。具体怎么实现,可参考对象的生命周期,和垃圾回收有一丝关系。此时的数据只要修改就算不使用saveOrUpdate也会达到更新数据库的效果。

还有一种对象:脱管对象。此对象拥有持久化标识,也就是说数据库中有这个对象对应的数据记录,但是Session关闭了,也就是说Session的缓存中没有这个对象了。不受Session的管理了。此时如果修改了这个对象的属性,不会了生联动,

也就是数据不会反映到数据库中去,除非调用saveOrUpdate()方法,并且commit后,此对象又成了持久化对象。

时间: 2024-10-11 23:03:47

hibernate中 saveorupdate(),save(),update(),merge()你是怎么看待的;的相关文章

Hibernate中saveOrUpdate()和merge()的区别

Hibernate中saveOrUpdate()和merge()的区别 this.getSession().merge(obj); this.getSession().saveOrUpdate(obj); saveOrUpdate(): saveOrUpdate()基本上就是合成了save()和update() 1.如果该po对象已经在本session中持久化了,在本session中执行saveOrUpdate不做任何事 2.如果savaOrUpdate(新po)与另一个与本session关联的

Hibernate Session中的save(),update(),delete(),saveOrUpdate() 细粒度分析

Hibernate在对资料库进行操作之前,必须先取得Session实例,相当于JDBC在对资料库操作之前,必须先取得Connection实例, Session是Hibernate操作的基础,它不是设计为执行绪安全(Thread-safe),一个Session由一个执行绪来使用. 开启Session Session实例由SessionFactory开启获得,例如: Configuration config = new Configuration().configure(); SessionFact

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 ----转----

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object). 瞬时态         由new命令开辟内存空间的java对象, eg. Person person = new Person(

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object). 瞬时态         由new命令开辟内存空间的java对象, eg. Person person = new Person(

Hibernate Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别?

session的方法: save(): insert 调用save方法之后,瞬时态对象可以变成持久态: update():update 将游离态对象变为持久态 saveOrUpdate():insert or update merge(): merge()方法可以完成save()和update()方法的功能,它的意图是将新的状态合并到已有的持久化对象上或创建新的持久化对象. 将游离态对象变为持久态. lock(): lock()方法是把一个没有更改过的脱管状态的对象变成持久状态. persisi

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 引自http://www.blogjava.net/TiGERTiAN/archive/2008/10/25/236519.html

Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object). 瞬时态         由new命令开辟内存空间的java对象, eg. Person person = new Person("xxx", "xx"); 如果没有变量对该对象进行引用,它将被java虚拟机

hibernate save,update,saveorupdate方法有什么区别

save肯定是添加的时候用,update修改时候用,saveorupdate是添加或修改,如果真是这样save和update的存在就没意义了,我们直接saveorupdate就行了. save在添加用的时候 不会出现索引机制(即遍历目录 效率最高)update在修改时候要遍历 不存在则会异常saveorupdate是优先遍历 如果不存在则创建(效率最低)merge和saveOrUpdate方法区别在于:merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供

hibernate中update与saveOrUpdate的区别

[转]hibernate中update与saveOrUpdate的区别 分类: Hibernate总结 2009-11-17 00:04 2121人阅读 评论(0) 收藏 举报 hibernatesession数据库javadaoapplication 先来点概念: 在Hibernate中,最核心的概念就是对PO的状态管理.一个PO有三种状态: 1.未被持久化的VO 此时就是一个内存对象VO,由JVM管理生命周期 2.已被持久化的PO,并且在Session生命周期内 此时映射数据库数据,由数据库

hibernate中的merge()方法

Hibernate提供有save().persist().savaOrUpdate()和merge()等方法来提供插入数据的功能.前三者理解起来较后者容易一些,而merge()方法从api中的介绍就可以看出它是最复杂的,因此要特别留意一下. Hibernate的api中关于merge()方法的原文 merge Object merge(Object object) throws HibernateException Copy the state of the given object onto