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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()方法可以完成save()和update()方法的功能,它的意图是将新的状态合并到已有的持久化对象上或创建新的持久化对象。

  5.lock()方法和update()方法的区别,update()方法是把一个已经更改过的脱管状态的对象变成持久态,lock()方法是把一个没有更改过的脱管状态的对象变成持久态

  6. persist()方法把一个瞬时态的实例持久化,但是并不保证标识符被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时间persist()方法保证当它在一个事务外部被调用的时候并不触发一个INSERT语句  

  7.saveOrUpdate()方法则是判断对象是否已经存在,如若不存在,则将这个瞬时态对象变成持久态,如若存在,则将这个游离态对象持久化

  8.replicate()方法同样是将瞬时态对象持久化,不同的是,假设你的对象的ID是用hibernate 负责生成的,但现在你想在数据库中插入一条已经指定ID的记录,这是就需要replicate()方法了

 

以上是关于Hibernate中Session的save()update()merge()lock()saveOrUpdate()和persist()方法的区别的主要内容,如果未能解决你的问题,请参考以下文章

hibernate中 session.save(实体类)方法的原理

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

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

如何使用 Hibernate session.save() 插入/保存对象而不更新旧记录

Hibernate save()saveOrUpdate()merge()的区别

hibernate 对象的持久化状态。 在session.save()之后 commit()之前 数据库有对应的记录吗?