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

session的方法:

save(): insert

调用save方法之后,瞬时态对象可以变成持久态;

update():update

将游离态对象变为持久态

saveOrUpdate():insert or update

merge():

merge()方法可以完成save()和update()方法的功能,它的意图是将新的状态合并到已有的持久化对象上或创建新的持久化对象。

将游离态对象变为持久态。

lock():

lock()方法是把一个没有更改过的脱管状态的对象变成持久状态。

persisit():

persist()方法保证当它在一个事务外部被调用的时候并不触发一个INSERT语句,当需要封装一个长会话流程的时候,persist()方法是很有必要的

对于persist()方法,按照官方文档的说明:

① persist()方法把一个瞬时态的实例持久化,但是并不保证标识符被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时间;

② persist()方法保证当它在一个事务外部被调用的时候并不触发一个INSERT语句,当需要封装一个长会话流程的时候,persist()方法是很有必要的;

③ save()方法不保证第②条,它要返回标识符,所以它会立即执行INSERT语句,不管是在事务内部还是外部。

瞬时态的实例可以通过调用save()、persist()或者saveOrUpdate()方法变成持久态;

游离态的实例可以通过调用 update()、saveOrUpdate()、lock()或者replicate()变成持久态。

hibernate对象的三种状态:瞬时态/持久态/游离态

时间: 2024-08-05 15:21:00

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

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

接触到mybatis竟然有把hibernate抛弃的想法. 言归正传,贴图为先.hibernate的三种状态位和切换之间对函数的使用: 总结下saveorupdate(),save(),update(),merge()这几个函数: save(),update():都是很好理解的 save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录. update()就是更新数据库中的记录: merge()就非常奇葩: 1.如果session中存在相同持久化标识(identifier)的实例,

Hibernate中Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法的区别

Hibernate的对象有三种状态,分别是:瞬时态(transient).持久态(persistent).游离态(detached) 1.瞬时态的实例可以通过调用save().persist()或者saveOrUpdate()方法变成持久态 2.游离态的实例可以通过调用 update().saveOrUpdate().lock()或者replicate()方法变成持久态 3.save()和update()方法的区别在于前者是将瞬时态对象变成持久态,后者是将游离态对象变成持久态 4.merge()

Hibernate中save、saveorupdate、persist方法的区别

所有这三个方法,也就是save().saveOrUpdate()和persist()都是用于将对象保存到数据库中的方法,但其中有些细微的差别.例如,save()只能INSERT记录,但是saveOrUpdate()可以进行记录的INSERT和UPDATE.还有,save()的返回值是一个Serializable对象,而persist()方法返回值为void. save与saveOrUpdate的区别 save通过INSERT语句将对象保存到数据库,产生一个新的ID,将数据插入到数据库,并返回一个

[原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

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三种状态的区分,以及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 Session中的save(),update(),delete(),saveOrUpdate() 细粒度分析

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

Hibernate update 和 merge 、saveOrUpdate的区别

this.getSession().update(obj); this.getSession().merge(obj); this.getSession().saveOrUpdate(obj); 1. update 和 merge的区别 首先在执行更新操作的时候,两者都必须要有id update是直接执行update 语句,执行后状态为持久化状态 而merge则不一样: 1. 如果session中有与之对应的对象,也就是主键相同,则会把要保存的obj的值copy给session中的对象,然后up