介绍

在我之前的文章中,我介绍了实体状态转换 对象关系映射范例。

当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句。 Hibernate的刷新行为并不总是像人们想象的那么明显。

后写

Hibernate尝试将持久性上下文刷新推迟到最后可能的时刻。 传统上,这种策略被称为事务后写

后写与Hibernate刷新更相关,而不是任何逻辑或物理事务。 在事务期间,刷新可能会发生多次。

仅对当前数据库事务可见刷新的更改。 在提交当前事务之前, 其他并发事务看不到任何更改。

持久性上下文(也称为第一级缓存 )充当当前实体状态转换和数据库之间的缓冲区。

在缓存理论中 ,后同步要求对缓存进行所有更改,缓存的责任是最终与后备存储同步。

减少锁争用

每个DML语句都在数据库事务中运行。 基于当前数据库事务隔离级别 ,可以为当前选定/修改的表行获取锁(共享或显式)。

减少锁保持时间可以降低死锁的可能性,并且根据可伸缩性理论 ,它可以提高吞吐量。 锁总是引入串行执行,根据阿姆达尔定律 ,最大加速与当前正在执行的程序的串行部分成反比。

即使在READ_COMMITTED隔离级别,UPDATE和DELETE语句也将获得锁。 此行为可防止其他并发事务读取未提交的更改或修改相关行。

因此,延迟锁定语句(UPDATE / DELETE)可能会提高性能,但是我们必须确保数据一致性不会受到任何影响。

批处理

延迟实体状态转换同步还有另一个主要优点。 由于所有更改都被立即清除,因此Hibernate可能会受益于JDBC批处理优化 。

批处理通过将多个DML语句分组到一个操作中来提高性能,从而减少数据库往返。

读自己写的一致性

由于查询始终针对数据库运行(除非命中了二级查询缓存),因此我们需要确保在查询开始运行之前,所有未决的更改都已同步。

因此,JPA和Hibernate都定义了“ 查询前刷新”同步策略。

从JPA到Hibernate冲洗策略

JPA FlushModeType 休眠刷新模式 Hibernate实现细节
汽车 汽车 有时会在查询执行前刷新会话。
承诺 承诺 会话在事务提交之前刷新。
总是 在执行查询之前, 始终刷新会话。
手册 该会话只能 手动刷新 。

决不
不推荐使用。 请改用MANUAL。 这是手动刷新的原始名称,但它误导用户以为Session永远不会被刷新。

当前冲洗范围

持久性上下文定义了默认的刷新模式,可以在创建Hibernate Session时覆盖它。 查询还可以采用刷新策略,因此会否决当前的持久性上下文刷新模式。

范围 冬眠 JPA
持久性上下文 届会 实体管理器
询问 询问
标准
询问
类型查询

敬请关注

在我的下一篇文章中,您将发现Hibernate FlushMode.AUTO破坏了SQL查询的数据一致性,并且您将看到如何克服这一缺点。

翻译自: https://www.javacodegeeks.com/2014/08/a-beginners-guide-to-jpahibernate-flush-strategies.html

JPA /休眠刷新策略初学者指南相关推荐

  1. hibernate jpa_JPA /Hibernate刷新策略初学者指南

    hibernate jpa 介绍 在我以前的文章中,我介绍了实体状态转换 对象关系映射范例. 当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句. Hibernate的刷新行为并 ...

  2. JPA persistence.xml 文件初学者指南

    介绍 在本文中,我将解释 JPA persistence.xml配置文件的用途,以及如何使用可用的 XML 标记或属性设置 Java Persistence 应用程序. 虽然 Spring 应用程序可 ...

  3. java初学者指南_企业Java中事务隔离级别的初学者指南

    java初学者指南 介绍 基于ACID事务属性的关系数据库强一致性模型. 在本文中,我们将阐明对资源本地事务和JTA事务使用不同的事务隔离级别和各种配置模式的背后原因. 隔离和一致性 在关系数据库系统 ...

  4. python编程电子书下载-python编程初学者指南

    python编程初学者指南全书共12章,内容浅显易懂,书中的每一个章节都会用一个完整的游戏来演示其中的关键知识点,最后都会对该章的知识点进行小结,还会给出一些小练习让你试试身手.东坡小编为大家分享py ...

  5. python编程入门指南上下百度云-Python编程初学者指南 PDF扫描版[87MB]

    Python编程初学者指南 内容简介: 如果你刚刚接触Python编程,而且正在寻找一本实用的教程,那么这本书为你量身打造.通过阅读本书,你不仅会学到很多实用的Python编程知识,还将懂得如何在实际 ...

  6. java初学者指南_Java代理初学者指南

    java初学者指南 尽管Java初学者很快学会了键入public static void main来运行他们的应用程序,但是即使是经验丰富的开发人员也常常不知道JVM对Java流程的两个附加入口点的支 ...

  7. python编程入门指南-Python编程初学者指南 PDF扫描版[87MB]

    Python编程初学者指南 内容简介: 如果你刚刚接触Python编程,而且正在寻找一本实用的教程,那么这本书为你量身打造.通过阅读本书,你不仅会学到很多实用的Python编程知识,还将懂得如何在实际 ...

  8. 终极WordPress SEO初学者指南

    改善WordPress SEO对于获得更多网站流量至关重要.可悲的是,大多数WordPress SEO指南对于新用户来说太技术性了. 如果您认真考虑增加网站流量,则需要注意WordPress SEO最 ...

  9. jumbo 安装mysql,RAC 和 Oracle Clusterware 最佳实践和初学者指南「ID 1526083.1」

    In this Document Applies to: Oracle Database - Enterprise Edition - Version 10.2.0.1 to 11.2.0.3 [Re ...

最新文章

  1. scikit-learn - 分类模型的评估 (classification_report)
  2. 第0周---python网络爬虫前奏
  3. docker设置国内镜像加速的坑
  4. 八十四、堆排序解决TopK问题
  5. php 鼠标小手,鼠标移动至少一次时创建PHP会话(Create PHP session when mouse moved at least once)...
  6. [vue] 怎么修改vue打包后生成文件路径?
  7. 赚大钱必备 怎样成为赚钱高手(图)
  8. 带你读论文丨基于视觉匹配的自适应文本识别
  9. 计算机的五大组成部分(计组学习一)
  10. ubuntu切换到root
  11. zabbix详解(十一)——zabbix监控MySQL性能实战
  12. spring @Bean注解的使用
  13. ARP表和MAC表的区别
  14. 怎么调用html调色板,JS实现的系统调色板完整实例
  15. 顶尖、顶级、权威期刊目录
  16. 使用CLion开发STM32时无法生成hex文件的解决办法
  17. 人的一生该怎样度过?
  18. 何帅:“在线”思考,王坚的云计算心理学
  19. SQL格式日志转为syslog格式:触发器中执行Shell命令
  20. 1、软件工程基础理论

热门文章

  1. Servlet 登录时数据校验
  2. python 随机排序_Python 如何随机打乱列表(List)排序
  3. python setup.py 指定文件到指定路径_linux下python安装到指定目录
  4. tomcatSupplement(1)tomcat启动脚本分析(以Windows平台为例)
  5. nacos启动失败:org.springframework.boot.web.server.WebServerExceptio
  6. Mac 环境变量配置
  7. Ubuntu下MySQL、Redis以及MongoDB三个数据库的启动、重启以及停止命令
  8. java流式传输对象_使用Java 8在地图上流式传输
  9. java 多线程变量可见性_Java多线程:易变变量,事前关联和内存一致性
  10. 易语言 字段重复_使对易失性字段的操作原子化