07_Hibernate多事务并发运行时并发问题检索方式
什么是事务?
事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。
事务就是逻辑上的一组操作,要么全都成功,要么全都失败
事务特性?
原子性:任何事务都是一个整体,不可分割,要么一起成功执行,要么一起失败回退
一致性:必须从一个正确的状态直接切换到另一个正确的状态(例如: 组成1个事务 可能由增、删、改、查四种操作,一致性就是他们要么同时全部成功,要么同时全部失败。成功与失败的操作保持一致。)
隔离性:一个会话看不到另一个会话未提交的事务操作
持久性:提交事务以后,事务操作会被持久化到数据库中,不可回退,别的会话可以看到事务操作的结果
如果不考虑事务的隔离性引发一些安全性问题?
读问题:
脏读:一个事务读到另一个事务未提交数据.
不可重复读:一个事务读到另一个事务已经提交数据(update),导致查询结果不一致.
虚读:一个事务读到另一个事务已经提交的数据(insert),导致查询结果不一致
写问题:
丢失更新
概念:

案列:

设置事务的隔离级别:
避免三种读的问题:
设置事务的隔离级别:
未提交读:以上三种读问题 都有可能发生.
已提交读:避免脏读,但是不可重复读和虚读有可能发生.
重复读:避免脏读和不可重复读,但是虚读是有可能发生.
串行的:可以避免以上三种读问题.
在Hibernate中设置事务的隔离级别:
在核心配置文件中:
<!-- 配置事务隔离级别 -->
<property name="hibernate.connection.isolation">4</property>
ANSI 事务隔离级别
ANSI SQL 标准定义了隔离级别,但并不是SQL数据库独有.JTA也定义了同样的隔
离级别.级别越高,成本越高
|
隔离级别 |
含义 |
|
READ_UNCOMMITED 读未提交 1 |
允许你读取还未提交的改变了的数据。可能导致脏、幻、不可重复读 |
|
READ_COMMITTED 读已提交 2 |
允许在并发事务已经提交后读取。可防止脏读,但幻读和 不可重复读仍可发生 |
|
REPEATABLE_READ 可重复读 4 |
对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生。 |
|
SERIALIZABLE 串行话 8 |
完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。 |
设置隔离级别
每个数据库连接都有默认的隔离级别,通常是读已提交或可重复读.可以通
过数据库配置设置,也可在应用程序中设置.例如Hibernate:
hibernate.connection.isolation = 4
1—Read uncommitted isolation
2—Read committed isolation
4—Repeatable read isolation
8—Serializable isolation
注意:* Hibernate不可能改变在受管环境下由应用服务器提供的数据库连接
的隔离级别,只能通过改变应用服务器配置的方式来改变.
* 设置隔离级别是全局选项,会影响所有的连接和事务.有时需要为某个特定
事务指定更多的限制.

丢失更新解决
悲观锁
乐观锁
悲观锁解决丢失更新


乐观锁解决丢失更新:


07_Hibernate多事务并发运行时并发问题检索方式的更多相关文章
- 《高性能Mysql》解读---Mysql的事务和多版本并发
1.base:ACID属性,并发控制 2.MySql事务的隔离级别有哪些,含义是什么? 3.锁知多少,读锁,写锁,排他锁,共享锁,间隙锁,乐观锁,悲观锁. 4.Mysql的事务与锁有什么关联?MySq ...
- 高并发场景系列(一) 利用redis实现分布式事务锁,解决高并发环境下减库存
原文:http://blog.csdn.net/heyewu4107/article/details/71009712 高并发场景系列(一) 利用redis实现分布式事务锁,解决高并发环境下减库存 问 ...
- Mysql中的读锁,写锁,乐观锁及事务隔离级别和并发问题
mysql读锁,写锁,乐观锁 读锁,也叫共享锁(shared lock) SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 写锁,也叫排他 ...
- 利用redis实现分布式事务锁,解决高并发环境下库存扣减
利用redis实现分布式事务锁,解决高并发环境下库存扣减 问题描述: 某电商平台,首发一款新品手机,每人限购2台,预计会有10W的并发,在该情况下,如果扣减库存,保证不会超卖 解决方案一 利用数据 ...
- Spring事务之详解--三种实现方式
实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: /* * 账户 */ public class Accoun ...
- Spring事务Transaction配置的五种注入方式详解
Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...
- python实现并发服务器实现方式(多线程/多进程/select/epoll)
python实现并发服务器实现方式(多线程/多进程/select/epoll) 并发服务器开发 并发服务器开发,使得一个服务器可以近乎同一时刻为多个客户端提供服务.实现并发的方式有多种,下面以多进 ...
- 数据库事务(2)---ACID与并发问题
事务 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 概念 一 ...
- 事务特性,事务的隔离级别,并发事务可能出现的问题,spring事务 数据库锁
1.0 事务特性(ACID) Atomicity:原子性,一个事务不可以被拆分 Consistency:一致性,在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是处于正确的状态, ...
随机推荐
- 网页设计师神器,快速生成网站配色、字型等风格的工具——Stylify Me
在设计网页时,最重要的一项便是网页的配色,颜色的使用在网页制作中起着非常关键的作用,不同的网站有着自己不同的风格,也有着自己不同的颜色.今天给大家介绍一个在线生成网站配色的工具——Stylify Me ...
- MySQL 10章_视图、事务
一. 视图: 视图(view)是保存了查询语句的一种数据库对象,其数据来源是查询语句对应的数据表,他的结果与数据表查询的结果一样也是一张虚拟的数据表 . 为什么需要视图: ) 不同的用户关心的数据可能 ...
- 9_山寨系统调用 SystemCallEntry
思想: 再次在 GDT 中偷内存 搭建 系统调用需要的 逻辑框架与功能实现: 基本分解妄想: 构建系统调用的代码: 拷贝到 偷取的内存中: idt 向量 序号21位置: 8003ee00`0008f1 ...
- C++ 系列:iostream 的用途与局限
转载自http://www.cnblogs.com/Solstice/archive/2011/07/17/2108715.html 本文主要考虑 x86 Linux 平台,不考虑跨平台的可移植性,也 ...
- redis笔记_源码_简单动态字符串SDS
参照:https://zcheng.ren/sourcecodeanalysis/theannotatedredissourcesds/#sds%E5%B0%8F%E7%BB%93 这里用char b ...
- VC中编辑框更新SetDlgItemText()与UpdateData()的区别
SetDlgItemText(IDC_EDIT_RXDATA,m_strREData); //前一个是ID号,后一个是编辑框的成员变量 UpdateData(FALSE); 它们都能更新编辑框的 ...
- try-catch 捕捉不到异常
code: int _tmain(int argc, _TCHAR* argv[]) { cout << "In main." << endl; //定义 ...
- (1)mysql数据库操作
1.安装mysql https://dev.mysql.com/downloads/windows/installer/8.0.html 2.mysql启停 运行mysql net s ...
- Docker系列(四):Docker容器互联
基于Volume的互联 为什么需要Volume docker文件系统是分层的,下面的是全部是只读的,最上面的是可写层,容器中的进程如果修改了某个文件,比如修改了下层的某个文件,其实是在最顶层复制下层文 ...
- ASP.NET自定义Validform的datatype
1.定义 <script type="text/javascript"> $(function () { $("#aa").Validform({ ...