本文章来给各位同学介绍一下Hibernate save()与persist()区别,希望此文章能对各位同学对于Hibernate save()与persist()有所理解。

Hibernate 之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯。另一方面,save()和 persist()方法还有一个区别:使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);但使用 persist() 方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对象的标识属性,所以程序执行 save() 会立即将持久化对象对应的数据插入数据库;而 persist() 则保证当它在一个事物外部被调用时,并不立即转换成 insert 语句, 这个功能是很有用的,尤其当我们封装一个长会话流程的时候,persist() 方法就显得尤为重要了。

这里给出一个明确的区分。(可以跟进src看一下,虽然实现步骤类似,但是还是有细微的差别)
主要内容区别: 
1,persist把一个瞬态的实例持久化,但是并"不保证"标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。

2,save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert

persist() is well defined. It makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. The spec doesn't say that, which is the problem I have with persist().

persist() also guarantees that it will not execute an INSERT statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context.

A method like persist() is required.

save() does not guarantee the same, it returns an identifier, and if an INSERT has to be executed to get the identifier (e.g. "identity" generator, not "sequence"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is not good in a long-running conversation with an extended Session/persistence context."

Hibernate save()与persist()区别相关推荐

  1. Hibernate save, saveOrUpdate, persist, merge, update 区别

    Hibernate save, saveOrUpdate, persist, merge, update 区别 - 小黑客 - 博客园 https://www.cnblogs.com/xiaoheik ...

  2. jdbc,mybatis,hibernate各自优缺点及区别

    jdbc,mybatis,hibernate各自优缺点及区别 先比较下jdbc编程和hibernate编程各自的优缺点. JDBC: 我们平时使用jdbc进行编程,大致需要下面几个步骤:1,使用jdb ...

  3. python模型保存save_浅谈keras保存模型中的save()和save_weights()区别

    今天做了一个关于keras保存模型的实验,希望有助于大家了解keras保存模型的区别. 我们知道keras的模型一般保存为后缀名为h5的文件,比如final_model.h5.同样是h5文件用save ...

  4. 简述 Hibernate 和 JDBC 的区别、优缺点

    1.hibernate是一个开源的.采用面向对象的思想实现ORM映射框架,它对jdbc进行了一层封装,对于数据库的连接.关闭.数据的持久化(增删改查).事务的管理都进行了封装,使得程序开发的时候可以用 ...

  5. hibernate与mybatis的区别和应用场景

    mybatis 与 hibernate 的区别和应用场景(转) 1    Hibernate : 标准的ORM(对象关系映射) 框架: 不要用写sql, sql 自动语句生成: 使用Hibernate ...

  6. 框架:Hibernate和Mybatis的区别

    Mybatis和hibernate不同, Mybatis不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并 ...

  7. mongodb save和insert区别

    mongodb的save和insert函数都可以向collection里插入数据,但两者是有两个区别: 一.使用save函数里,如果原来的对象不存在,那他们都可以向collection里插入数据,如果 ...

  8. JPA、Hibernate、Mybatis的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装 ...

  9. MongoTemplate 关于 insert 和 save 函数的区别

    项目在使用 spring-data-mongodb 来操作 Mongo 数据库的过程中,经常会使用到 MongoTemplate 来增删改查我们的数据.而关于插入数据这一块 MongoTemplate ...

最新文章

  1. 计算机网络(一)计算机网络概述、组成、功能分类、性能指标 | 思维导图
  2. JavaScript实现离散傅立叶变换DFT算法(附完整源码)
  3. php跨域单点登录,SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析...
  4. ubuntu 安装 TensorFlow、opencv3 的 tips
  5. 例说C#深拷贝与浅拷贝
  6. Thinkphp 发送邮件
  7. aws lambda_四处奔走:初学者遇到AWS Lambda
  8. C#的变迁史09 - C# 5.0 之调用信息增强篇
  9. 【Linux远程管理】RDP协议远程管理
  10. Nginx平滑添加模块
  11. 五子棋(机器人随机下棋简单版本)
  12. html在线客服,网页在线客服代码_jQuery QQ客服
  13. java枚举类的作用及其使用
  14. mysql 查看事件_Mysql中的事件
  15. 东南计算机专硕和学硕,问了200个学长学姐,终于知道专硕学硕的“差别”
  16. <PrivateImplementationDetails>.ComputeStringHash 错误解决办法
  17. java性能调优指南,就是这么简单
  18. 行业缩减他却增加!海尔智家研发投入创新高
  19. 全网营销如何落地?全网营销的途径有哪些?
  20. 第1章 高瞻远瞩一一游戏开发面面观

热门文章

  1. C++ 对文件的最常用基操之对 ASCII 文件(文本文件、字符文件)的操作
  2. 哲学家是如何思考问题的-2.0版
  3. 一个交期建议程序的坑 4gl SQL
  4. 22款奔驰C260L升级原厂360全景影像 倒车更加直观
  5. 未来中国智能制造九大趋势
  6. 链接下载(在线链接下载)
  7. mac php开发套件_Mac 下搭建 PHP 开发环境的步骤
  8. 人生历程中的几个观念瓶颈
  9. 开启 Chrome、Edge 浏览器的多线程下载功能
  10. 天天预约|新功能工具「美团优惠券」上线啦!