java持久性与安全性_Java持久性锁定初学者指南

java持久性与安全性

隐式锁定

在并发理论中,锁定用于保护可变共享数据免受危险数据完整性异常的影响。 因为锁管理是一个非常复杂的问题,所以大多数应用程序都依赖于其数据提供程序隐式锁技术。

将整个锁定职责委托给数据库系统既可以简化应用程序开发,又可以防止诸如死锁之类的并发问题。 死锁仍然可能发生,但是数据库可以检测并采取安全措施(任意释放两个竞争锁之一)。

物理锁

大多数数据库系统使用共享(读取)排他(写入)锁,这归因于特定的锁定元素(行,表)。 尽管SQL标准要求物理锁定,但是悲观的方法可能会阻碍可伸缩性。

现代数据库已实现了轻量级锁定技术,例如多版本并发控制 。

隐式数据库锁定隐藏在事务隔离级别配置的后面。 每个隔离级别都带有预定义的锁定方案,旨在防止某些数据完整性异常集。

READ COMMITTED对当前事务修改的数据使用查询级共享锁和排他锁。 REPEATABLE READ和SERIALIZABLE在读取时使用事务级共享锁,在写入时使用互斥锁。

逻辑锁

如果数据库锁定足以用于批处理系统,则多请求Web流将跨越多个数据库事务。 对于长时间的对话 ,逻辑(乐观)锁定机制更为合适。

与对话级别的可重复读取存储结合使用 ,乐观锁定可以确保数据完整性,而无需牺牲可伸缩性。

JPA支持开放式锁定和持久性上下文可重复读取,使其非常适合实现逻辑事务。

显式锁定

虽然对于大多数应用程序并发控制要求,隐式锁定可能是最佳选择,但有时您可能需要更细粒度的锁定策略。

大多数数据库系统都支持查询时排他锁定指令,例如SELECT FOR UPDATE或SELECT FOR SHARE 。 因此,我们可以使用较低级别的默认隔离级别(READ COMMITTED),同时为特定事务方案请求共享或排他锁。

大多数乐观锁定实现只验证修改后的数据,但是JPA也允许显式乐观锁定。

JPA锁定

作为数据库抽象层,JPA可以从基础RDBMS提供的隐式锁定机制中受益。 对于逻辑锁定,JPA还提供了可选的自动实体版本控制机制。

JPA支持以下操作的显式锁定:

  • 寻找一个实体
  • 锁定现有的持久性上下文实体
  • 刷新实体
  • 查询通过JPQL,标准或本机查询

显式锁类型

LockModeType包含以下乐观和悲观锁定模式:

锁定模式类型 描述
没有 在没有显式锁定的情况下,应用程序将使用隐式锁定(乐观或悲观)
乐观的 始终在事务提交时发出版本检查,因此确保乐观锁定可重复读取。
与OPTIMISTIC相同。
OPTIMISTIC_FORCE_INCREMENT 始终增加实体版本(即使实体不变),并在事务提交时发出版本检查,从而确保乐观锁定可重复读取。
与OPTIMISTIC_FORCE_INCREMENT相同。
PESSIMISTIC_READ 获取共享锁以防止任何其他事务获取PESSIMISTIC_WRITE锁。
PESSIMISTIC_WRITE 获取排他锁以防止任何其他事务获取PESSIMISTIC_READ或PESSIMISTIC_WRITE锁。
PESSIMISTIC_FORCE_INCREMENT 获取数据库锁以防止任何其他事务获取PESSIMISTIC_READ或PESSIMISTIC_WRITE锁,并且在提交事务时会增加实体版本。

锁定范围和超时

JPA 2.0定义了javax.persistence.lock.scope属性,采用以下值之一:

  • NORMAL由于对象图可以跨越多个表,因此显式的锁定请求可能会传播到多个表(例如,联接继承,辅助表)。由于整个实体关联的行都被锁定,因此多对一一对-一对一的外键也将被锁定,但不会锁定另一侧父级关联。 此范围不会传播到子级集合。
  • 扩展显式锁将传播到元素集合和联结表 ,但不会锁定实际的子实体。 该锁仅在防止幻像读取或更改实际的子实体状态的同时用于防止删除现有的子实体。

JPA 2.0还引入了javax.persistence.lock.timeout属性,使我们能够配置锁定请求在引发PessimisticLockException之前将等待的时间(毫秒)。

Hibernate锁定

Hibernate支持所有JPA锁定模式和一些其他特定的锁定选项。 与JPA一样,可以为以下操作配置显式锁定:

  • 使用各种LockOptions设置锁定实体。
  • 得到一个实体
  • 加载实体
  • 刷新实体
  • 创建实体或本机查询
  • 创建条件查询

LockModeConverter负责映射JPA和Hibernate锁定模式,如下所示:

Hibernate锁定模式 JPA LockModeType
没有 没有
乐观的
乐观的
OPTIMISTIC_FORCE_INCREMENT
OPTIMISTIC_FORCE_INCREMENT
PESSIMISTIC_READ PESSIMISTIC_READ
PESSIMISTIC_WRITE


升级

UPGRADE_NOWAIT UPGRADE_SKIPLOCKED
PESSIMISTIC_WRITE
PESSIMISTIC_FORCE_INCREMENT



PESSIMISTIC_FORCE_INCREMENT

不建议使用UPGRADE和FORCE锁定模式,而推荐使用PESSIMISTIC_WRITE 。

UPGRADE_NOWAIT和UPGRADE_SKIPLOCKED分别使用Oracle风格的select用于更新nowait或select用于更新跳过锁定语法。

锁定范围和超时

Hibernate还定义了作用域和超时锁定选项 :

  • 范围
    锁定范围允许显式锁定级联到所拥有的关联 。
  • 超时
    超时间隔可能会阻止锁定请求无限期地等待。

在我的下一篇文章中,我将介绍不同的显式锁定设计样式,敬请期待!

翻译自: https://www.javacodegeeks.com/2015/01/a-beginners-guide-to-java-persistence-locking.html

java持久性与安全性

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

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

相关文章

c语言实验报告5数组,c语言实验报告五一维数组.doc

c语言实验报告五一维数组《C程序设计》课程实验报告学院: 班级: 姓名: 学号: 实验设备:计算机1台2011年3月1日实验项目名称一维数组掌握一维数组的定义、初始化,以及一维数组元素的下标法引用。实验要求&am…

当C语言函数执行成功时,返回1和返回0究竟哪个好?

基本上,没有人会将大段的C语言代码全部塞入 main() 函数。更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数。C语言代码的组合千变万化,因此函数的功能可能会比较复杂&#xf…

ubuntu自定义安装里怎么选_超市里的五香粉怎么选?看懂配料表,两个小技巧,不怕选不好。...

点击右上角【关注】,可获得本头条号推荐的更多美食干货五香粉是家庭常用的一种调味料,焖、炖、烧、煮、卤都常备使用,如今市场上的五香粉品牌也是相当繁多,质量也是参差不齐,有时买到的五香粉烧制的菜肴根本就不好吃&a…

原来C语言还可以这样实现“泛型编程”!

在回答标题问题之前,先了解下什么是泛型编程。泛型编程(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。C支持…

javadoc 标签_新的Javadoc标签@ apiNote,@ implSpec和@implNote

javadoc 标签如果您已经在使用Java 8,则可能会看到一些新的Javadoc标签: apiNote , implSpec和implNote 。 他们怎么了? 如果要使用它们,该怎么办? 总览 该帖子将快速查看标签的来源和当前状态。 然后&…

c语言万年历附加功能,万年历(c语言,多功能).doc

万年历(c语言,多功能)#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "windows.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#…

联想小新300加固态_就联想小新 Pro 13 固态硬盘混用一事,官方回应

IT之家11月3日消息 近日有用户反馈称,联想小新Pro 13的部分批次固态硬盘从三星PM981A换成亿联了,因此还出现了退货现象。针对上述情况,联想官方刚刚发表声明回应此事。以下为联想回应全文:有关小新Pro 13固态硬盘(SSD)配置问题的公…

C语言入门基础之输入和输出

标准输入函数在stdio.h中scanf声明如下:/* Read formatted input from stdin.This function is a possible cancellation point and therefore notmarked with __THROW. */ extern int scanf (const char *__restrict __format, ...) __wur;使用Mac或Linux的同学&am…

camel java_与Java EE和Camel的轻量级集成

camel javaEnterprise Java具有不同的风格和观点。 从简单的平台技术(众所周知的Java EE)开始,到不同的框架和集成方面,最后是涉及以数据为中心的用户界面或特定可视化效果的用例。 Java EE本身无法解决的最突出的问题是“集成”。…

c语言 伪随机数程序,C语言的伪随机数

一直想好好的系统的学习一下C语言的伪随机数,今天终于逮到机会了伪随机数C语言中有可以产生随机数据的函数,需要添加stdlib.h和time.h头文件。首先在main函数开头加上srand(unsigned)time(NULL))。先来介绍一下srand头文件:定义函数&#xff…

最大隶属度原则_模糊数学笔记:六、模糊模型识别-I(最大隶属度原则)

1、模型识别的问题提出模型识别,通俗地理解即是对一个类别未知的对象进行归类(或者叫分类)。这里与聚类不同的是,聚类实际上是要区分出已有的样本哪些属于同一类,但并没有参考标准。而识别则事先有参考的标准&#xff…

C语言经典题

C 库函数 - tanh()描述C 库函数 double tanh(double x) 返回 x 的双曲正切。声明下面是 tanh() 函数的声明。double tanh(double x)参数x -- 浮点值。返回值该函数返回 x 的双曲正切。实例下面的实例演示了 tanh() 函数的用法。#include#include int main (){ double x, ret;…

用c语言产生大素数,C语言实现寻找大素数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼找到一亿内所有素数并写入文件用时 35秒.#include "math.h"#include "stdio.h" #include "stdlib.h" #include "time.h"int isP(int num,int *p) { int i; int lenp[0]; int flag1; p;for…

java ee自动生成编码_EE Servlet 3:在Servlet中生成HTML输出

java ee自动生成编码如果您只需要在EE Web模块中处理少量请求URI,那么在Servlet代码中生成自己HTML响应可能比使用完整的模板库更容易。 作为示例的一部分,我尝试了一个非常简单的Java DSL,该Java DSL在编写自己的Serlvet时生成html输出。 代…

jq 控制td只显示一行_CSS让表格里的内容强制显示一行,超出长度显示省略号

在写html页面的时候,会经常用到表格,而且很多时候一个tr里边需要包含好几个td,这样就会导致tr的高度不一致,被撑开了这时候,如果能让td里的内容强制显示在一行,并让超出边界范围的内容显示点点,…

C++11的模板改进

C11关于模板有一些细节的改进:模板的右尖括号模板的别名函数模板的默认模板参数模板的右尖括号C11之前是不允许两个右尖括号出现的,会被认为是右移操作符,所以需要中间加个空格进行分割,避免发生编译错误。int main() {std::vecto…

java面试题2014_Java生态系统– 2014年我的5大亮点

java面试题20141月1日-RedMonk Analyst公司宣布Java比以往任何时候都更加流行和多样化! 2014年,随着FOSDEM的Free Java会议室的年会,Java生态系统开始轰轰烈烈地响起。 除了关于OpenJDK和相关主题的许多精深的技术讲座外,Steve OG…

android 第三方圆弧进度条,android 可配置的圆弧进度条

Arc ProgressBar Configurable 圆弧环形进度条DEMOAttributesnameformatdescriptionborderWidthinteger圆弧边框的宽度progressStyletick/arc进度条类型,tick 为带刻度的radiusinteger半径arcbgColorcolor圆弧的边框背景degreeinteger弧度,设置为 0 即为…

三分钟让孩子的数学开窍

周末给孩子灌了一个世界观和方法论:用笛卡尔坐标系描述世界。 我强调,学习笛卡尔坐标系不是做题,它是工具,它是帮你解题的,而不是为难你的。 任何数学题放在笛卡尔坐标系都可以通过机械的方法硬算,计算过程…

oracle大对象实例_超大型Oracle数据库设计实例

超大型系统的特点为: 1.处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB; 2.系统必须提供实时响应功能,系统需不停机运行,要求系统有很高的可用性及可扩展性。 这篇是笔者针对以上特…