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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进入登录页时,用户名输入框自动聚焦、按enter键让密码框聚焦,完整输入信息后登录

让element-ui的输入框聚焦的4种方式 思路:(可以跳过这一步看完整代码——完整代码) 1. 进入页面时,用户名输入框就要获取焦点,使用 自定义指令 聚焦更方便。当然也可以用 ref 在 mounted() 钩子函数中让输入框聚焦。 …

JS的对象及其属性和方法

在JavaScript中是基于对象的编程,而不是完全的面向对象的编程。       那麽什麽是对象呢?如果你学过一些VB的编程,对这个名词一定不会陌生。通俗的说,对象是变量的集合体,对象提供对于数据的一致的组织手段&…

vue-cli安装步骤

vue-cli脚手架模板是基于node下的npm来完成安装的所以首先需要安装node 条件: node在4.以上,npm在3以上 安装 指令: 1、 npm install -g vue-cli在全局下安装vue-cli # 安装 vue-cli npm install -g vue-cli# 初始化 webpack 项目 vue in…

# reverse swap

目录: swap(数字、字符串、)reverseStringreverseWordsswap /** 借助临时变量 */ function swap(str1, str2) {const temp str1;str1 str2;str2 temp; } /** 解构赋值 */ [a, b] [b, a];/** 对象 */ {a,b} {a:b,b:a} /** 加法 只适用于…

使用Java编写简单的老虎机游戏

无论游戏多么简单或复杂 ,Java都能胜任! 在这篇文章中,让我们看一下Java编程的初学者如何制作一个简单而功能齐全的老虎机。 老虎机已经存在很长时间了,但是它的娱乐价值似乎并没有减弱。 InterCasino是第一个在1996年向世界提供…

类似flashget的浮动窗口的实现

作者:苍竹先生下载源代码一、简介:象flashget、迅雷、BT等都有浮动窗口,能详细地显示下载的详细信息,该类型的窗口有一下几个特点:1、窗口无标题栏,窗口的大小跟位图一样大。2、前端显示。3、在客户区内按下…

html笔记(二)html4+css2.0(元素类型、css精灵、宽度自适应、BFC、浏览器相关概述、css统筹)

大标题小节一、元素类型1. 元素分类2. 置换和非置换元素3. 元素类型转换二、css精灵三、宽高自适应1. 宽度自适应2. 高度自适应3. 最小高度自适应4. 高度塌陷及解决办法5. 元素的高度自适应屏幕的高度四、BEC概念应用1. 常见定位方案2. 触发BFC3. BFC特性及应用4. BFC概念五、浏…

25.C# 异步调用Web服务

1.创建Web服务 1.1VS新建ASP.Net空Web应用程序 1.2添加Web服务新建项 1.3添加GetWeather方法和相关类 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.EnterpriseServices;namespace WebServ…

css中单位的使用

css中许多的属性都需要添加长度,而长度一般由数字和单位构成,如1px,1.5em,2vh;也可以省略单位,如line-height:1.5,表示行高为字体大小的1.5倍; 长度单位一般也分为相对长度和绝对长度。 (一)绝…

Office开发程序集版本及部署问题

Office 开发遇到了OFFICE 2003和OFFICE 2007程序集兼容性的问题,使用OFFICE 11.DLL只能适应OFFICE 2003,Office 12.dll 能够兼容Office 2003和Office 2007。 以前部署时,是建议客户安装Office 2003。 今天看到《开发Office的一些应用部署后出现找不到程序…

OSGi:进入微服务架构的门户

在构建可扩展,可靠的分布式系统的背景下,“模块化”和“微服务体系结构”这两个术语如今经常出现。 众所周知,Java平台本身在模块化方面很弱( Java 9将通过交付Jigsaw项目来解决这一问题),从而为OSGi和JBos…

新闻实时分析系统-Kafka分布式集群部署

Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark都支持与Kafka集成。 1.下载Kafka并安装 1)下载Apache版本的Kafka。 …

html笔记(五)2D、3D、3D动画

大标题小节一、2D1. css3 渐变的语法及应用2. 动画过渡:transition3. 2D转换属性:transform二、3D1. 3D转换2. 3D视距3. 3D翻转方法4. 3D位置移动5. 3D缩放三、3D动画1. keyframes2. 动画属性animation一、2D 1. css3 渐变的语法及应用; &a…

微信内置浏览器点击“返回”关闭窗口

场景:开发微信内的H5活动,需要进行微信授权,我们采用的是在一个静态页面(只有js,所以是个空白页面)内进行授权,授权后再跳转到活动主页。 客户需求:从活动主页返回时不显示这个授权…

dhl:mvc用户登陆身份验证

登录:[HttpPost]public ActionResult LoginSuccess() {bool rememberMe Request["rememberMe"].Contains("true"); UserAccount account ia.GetUserAccountByUserName(brief.UserName);//验证成功string usercookie account.UIN ",&qu…

基于上下文的访问控制

拓扑图 配置步骤 1配置端口ip地址,并检测连通性 服务器 ping pc端 服务器 telnet R3 2配置命令 R3(config)# ip access-list extended go R3(config-ext-nacl)# deny ip any any //此ACL目的是隔绝外网流量 R3(config-ext-nacl)# exit R3(config)# interface s0…

使用Gradle将JAR工件发布到Artifactory

因此,我浪费了一两天(投资)只是为了了解如何使用Gradle将JAR发布到本地运行的Artifactory服务器。 我使用Gradle Artifactory插件进行发布。 我迷失了无穷循环,包括各种版本的各种插件和执行各种任务。 是的,我之前阅读…

js 基础

1.注释 css: /* 这是一行单行注释 *//* 这个注释分散 在了多个物理 行上面 */  html: <!-- 注释内容 -->  JS: // 2.<a>标签中导航到同一个界面的不同位置  <p><a href"#C4">查看 Chapter 4。</a></p> <h2><…

Combox使用的一些技巧

这些天做一个小型的CMS&#xff0c;也就几张表&#xff0c;用WCFLINQ2SQLSilverlight这种方式开发的&#xff0c;对最常用的控件如DataGrid,DataForm以及Toolkit里其它一些控件的用法有了一定的了解&#xff0c;同时参照JV9的教程&#xff0c;把Silverlight里的验证机制仔细的学…

HTML+css实现的效果

一、鼠标划过效果 1. 类似电子书的图书效果2. 绝对定位实用案例 二、锚点的应用 三、css精灵&#xff08;图片整合&#xff09; 用一张图片写出一串电话号码用一张图片写出导航栏的滑动效果 四、后台管理布局 单飞布局双飞布局后台页面管理布局 五、css3部分 在一个div…