JPA /休眠刷新策略初学者指南
介绍
在我之前的文章中,我介绍了实体状态转换 对象关系映射范例。
当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句。 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 /休眠刷新策略初学者指南相关推荐
- hibernate jpa_JPA /Hibernate刷新策略初学者指南
hibernate jpa 介绍 在我以前的文章中,我介绍了实体状态转换 对象关系映射范例. 当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句. Hibernate的刷新行为并 ...
- JPA persistence.xml 文件初学者指南
介绍 在本文中,我将解释 JPA persistence.xml配置文件的用途,以及如何使用可用的 XML 标记或属性设置 Java Persistence 应用程序. 虽然 Spring 应用程序可 ...
- java初学者指南_企业Java中事务隔离级别的初学者指南
java初学者指南 介绍 基于ACID事务属性的关系数据库强一致性模型. 在本文中,我们将阐明对资源本地事务和JTA事务使用不同的事务隔离级别和各种配置模式的背后原因. 隔离和一致性 在关系数据库系统 ...
- python编程电子书下载-python编程初学者指南
python编程初学者指南全书共12章,内容浅显易懂,书中的每一个章节都会用一个完整的游戏来演示其中的关键知识点,最后都会对该章的知识点进行小结,还会给出一些小练习让你试试身手.东坡小编为大家分享py ...
- python编程入门指南上下百度云-Python编程初学者指南 PDF扫描版[87MB]
Python编程初学者指南 内容简介: 如果你刚刚接触Python编程,而且正在寻找一本实用的教程,那么这本书为你量身打造.通过阅读本书,你不仅会学到很多实用的Python编程知识,还将懂得如何在实际 ...
- java初学者指南_Java代理初学者指南
java初学者指南 尽管Java初学者很快学会了键入public static void main来运行他们的应用程序,但是即使是经验丰富的开发人员也常常不知道JVM对Java流程的两个附加入口点的支 ...
- python编程入门指南-Python编程初学者指南 PDF扫描版[87MB]
Python编程初学者指南 内容简介: 如果你刚刚接触Python编程,而且正在寻找一本实用的教程,那么这本书为你量身打造.通过阅读本书,你不仅会学到很多实用的Python编程知识,还将懂得如何在实际 ...
- 终极WordPress SEO初学者指南
改善WordPress SEO对于获得更多网站流量至关重要.可悲的是,大多数WordPress SEO指南对于新用户来说太技术性了. 如果您认真考虑增加网站流量,则需要注意WordPress SEO最 ...
- 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 ...
最新文章
- scikit-learn - 分类模型的评估 (classification_report)
- 第0周---python网络爬虫前奏
- docker设置国内镜像加速的坑
- 八十四、堆排序解决TopK问题
- php 鼠标小手,鼠标移动至少一次时创建PHP会话(Create PHP session when mouse moved at least once)...
- [vue] 怎么修改vue打包后生成文件路径?
- 赚大钱必备 怎样成为赚钱高手(图)
- 带你读论文丨基于视觉匹配的自适应文本识别
- 计算机的五大组成部分(计组学习一)
- ubuntu切换到root
- zabbix详解(十一)——zabbix监控MySQL性能实战
- spring @Bean注解的使用
- ARP表和MAC表的区别
- 怎么调用html调色板,JS实现的系统调色板完整实例
- 顶尖、顶级、权威期刊目录
- 使用CLion开发STM32时无法生成hex文件的解决办法
- 人的一生该怎样度过?
- 何帅:“在线”思考,王坚的云计算心理学
- SQL格式日志转为syslog格式:触发器中执行Shell命令
- 1、软件工程基础理论
热门文章
- Servlet 登录时数据校验
- python 随机排序_Python 如何随机打乱列表(List)排序
- python setup.py 指定文件到指定路径_linux下python安装到指定目录
- tomcatSupplement(1)tomcat启动脚本分析(以Windows平台为例)
- nacos启动失败:org.springframework.boot.web.server.WebServerExceptio
- Mac 环境变量配置
- Ubuntu下MySQL、Redis以及MongoDB三个数据库的启动、重启以及停止命令
- java流式传输对象_使用Java 8在地图上流式传输
- java 多线程变量可见性_Java多线程:易变变量,事前关联和内存一致性
- 易语言 字段重复_使对易失性字段的操作原子化