当前位置: 首页 > 面试题库 >

请问,hibernate的 save() 和persist() 方法分别是做什么的?有什么区别?

刘狐若
2023-03-14
本文向大家介绍请问,hibernate的 save() 和persist() 方法分别是做什么的?有什么区别?相关面试题,主要包含被问及请问,hibernate的 save() 和persist() 方法分别是做什么的?有什么区别?时的应答技巧和注意事项,需要的朋友参考一下

考察点:session

 

Hibernate的对象有三种状态:瞬时态(transient)、持久态(persistent)和游离态(detached),如第135题中的图所示。瞬时态的实例可以通过调用save()、persist()或者saveOrUpdate()方法变成持久态;游离态的实例可以通过调用 update()、saveOrUpdate()、lock()或者replicate()变成持久态。save()和persist()将会引发SQL的INSERT语句,而update()或merge()会引发UPDATE语句。save()和update()的区别在于一个是将瞬时态对象变成持久态,一个是将游离态对象变为持久态。merge()方法可以完成save()和update()方法的功能,它的意图是将新的状态合并到已有的持久化对象上或创建新的持久化对象。对于persist()方法,按照官方文档的说明:① persist()方法把一个瞬时态的实例持久化,但是并不保证标识符被立刻填入到html" target="_blank">持久化实例中,标识符的填入可能被推迟到flush的时间;② persist()方法保证当它在一个事务外部被调用的时候并不触发一个INSERT语句,当需要封装一个长会话流程的时候,persist()方法是很有必要的;③ save()方法不保证第②条,它要返回标识符,所以它会立即执行INSERT语句,不管是在事务内部还是外部。至于lock()方法和update()方法的区别,update()方法是把一个已经更改过的脱管状态的对象变成持久状态;lock()方法是把一个没有更改过的脱管状态的对象变成持久状态。

 类似资料:
  • 问题内容: 通过文档,我只能找到一个不同之处,即save方法生成将对象作为生成的标识符返回,但persist不是。这是提供persist方法的唯一目的。如果是的话,即使他不打算这样做对程序员也有帮助要使用生成的标识符,他可以使用save并忽略返回值。 也来通过这个线程有什么优势依然存在(中)与保存()在Hibernate中?。我可以从此线程获取的有意义的语句是 persist(),还可以保证,如果

  • 问题内容: 之间有什么区别? 和: 这是什么意思? 问题答案: 用于保存软件包以用于开发目的。示例:单元测试,缩小 用于保存应用程序运行所需的软件包。

  • 本文向大家介绍请问Hibernate中Session的load方法和get方法的区别是什么?相关面试题,主要包含被问及请问Hibernate中Session的load方法和get方法的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:请求方式 参考回答: 主要有以下三项区别: ① 如果没有找到符合条件的记录,get方法返回null,load方法抛出异常。 ② get方法直接返回实体类

  • 问题内容: 谁能告诉我vs hibernate的优势是什么? 问题答案: 从此论坛帖子 定义明确。它使瞬态实例持久化。但是,它不能保证将标识符值立即分配给持久性实例,分配可能在刷新时发生。规范没有这么说,这是我的问题。 还保证如果在事务边界之外调用它,则不会执行INSERT语句。这在具有扩展会话/持久性上下文的长时间对话中很有用。 需要类似的方法。 不能保证相同,它返回一个标识符,如果必须执行IN

  • 本文向大家介绍Hibernate中save()和persist()之间的区别,包括了Hibernate中save()和persist()之间的区别的使用技巧和注意事项,需要的朋友参考一下 Save()和这两种方法都用于在数据库中保存对象。  根据文档- Save()-坚持给定的瞬时实例,首先分配一个生成的标识符。(或者,如果使用分配的生成器,则使用标识符属性的当前值。)如果关联是用cascade

  • 我试图理解,何时何地使用这些标签,我明白一个是开发依赖项,另一个是项目依赖项,但是当将其用于实时项目时,我没有发现任何差异。我正在寻找一种方法,这将抛出错误的安装类型。有办法做到这一点吗?