hibernate隔离级别

Java 里 Hibernate 的并发事务隔离级别 本文旨在全面解析 Hibernate 框架中的事务隔离级别机制,帮助开发者理解并发事务处理的核心概念,掌握在 Hibernate 应用中正确配置和使用事务隔离级别的方法。讨论范围包括标准隔离级别的定义、Hibernate 的实现方式、性能考量以及实际应用案例。文章首先介绍事务隔离的基本概念,然后深入分析四种标准隔离级别,接着探讨 Hibernate 的具体实现方式,最后通过实际案例展示隔离级别的应用和性能影响。事务(Transaction): 一组原子性的数据库操作序列。 阅读详情
数据库事务 :事务是指一组相互依赖的操作行为,如银行交易、股票交易或网上购物。事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务失败。关于事务的一个经典例子就是:A到银行办理转账事务,把100元钱转到B的账号上,这个事务包含以下操作行为: 

(1)从A的账户上减去100元。 

(2)往B的账户上增加100元。

      显然,以上两个操作必须作为一个不可分割的工作单元。假如仅仅第一步操作执行成功,使得Tom的账户上扣除了100元,但是第二步操作执行失败,Jack的账户上没有增加100元,那么整个事务失败。 数据库事务是对现实生活中事务的模拟,它由一组在业务逻辑上相互依赖的SQL语句组成。 

 下面我们一起来看一下数据库事务的生命周期:

                                             

这个数据库事务的生命周期图反应出数据库事务的三个边界:

1.事务的开始边界。 

2.事务的正常结束边界(COMMIT):提交事务,永久保存被事务更新后的数据库状态。 

3.事务的异常结束边界(ROLLBACK):撤销事务,使数据库退回到执行事务前的初始状态。 

其实每个数据库连接都有个全局变量@@autocommit,表示当前的事务模式,它有两个可选值: 0:表示手工提交模式。 1:默认值,表示自动提交模式。 

在自动提交模式下,每个SQL语句都是一个独立的事务。也就是说,每执行一条sql语句,数据库都会自动提交这个事务,当我们用数据库另一个客户端去查询的时候,我们可以看到这个新修改或插入的数据。在手工提交模式下,必须显式指定事务开始边界和结束边界: 

–事务的开始边界:begin 

–提交事务:commit 

–撤销事务:rollback 

下面我们来看一下通过JDBC API是如何声明事务边界的:

Connection提供了以下用于控制事务的方法: 

1.setAutoCommit(boolean autoCommit):设置是否自动提交事务 

2.commit():提交事务 

3.rollback():撤销事务 

下面我们看一下具体的应用示例:

[java]  view plain copy
  1. try {   
  2. con = java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);   
  3. //设置手工提交事务模式   
  4. con.setAutoCommit(false);   
  5. stmt = con.createStatement();   
  6. //数据库更新操作1   
  7. stmt.executeUpdate("update ACCOUNTS set BALANCE=900 where ID=1 ");   
  8. //数据库更新操作2   
  9. stmt.executeUpdate("update ACCOUNTS set BALANCE=1000 where ID=2 ");   
  10. con.commit(); //提交事务   
  11. }catch(Exception e) {   
  12. try{   
  13. con.rollback(); //操作不成功则撤销事务   
  14. }catch(Exception ex){   
  15. //处理异常   
  16. ……   
  17. }   
  18. //处理异常   
  19. ……   
  20. }finally{…}   


       看到上边的示例我们可以看出,其实hibernate事务边界就是模仿者JDBC的事务边界来的,其实在hibernate底层的事务管理就是利用的JDBC的事务管理。我们来看一下hibernate事务边界:

1.声明事务的开始边界: 

Transaction tx=session.beginTransaction(); 

2.提交事务: tx.commit(); 

3.撤销事务: tx.rollback(); 

       我们在学习JDBC数据库事务管理的时候,重点也是难点的学习了jdbc多个事务并发问题。既然hibernate底层是用JDBC事务管理实现的,那么它也一定存在着多个事务并发的问题。下面我们就具体来看一下:hibernate多个事务并发的并发问题:

•第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。 

•脏读:一个事务读到另一事务未提交的更新数据。 

•虚读:一个事务读到另一事务已提交的新插入的数据。 

•不可重复读:一个事务读到另一事务已提交的更新数据。 

•第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一事务已提交的更新数据。 

下面我们就脏读来举一个示例:

                                            

取款事务在T5时刻把存款余额改为900元,支票转账事务在T6时刻查询账户的存款余额为900元,取款事务在T7时刻被撤销,支票转账事务在T8时刻把存款余额改为1000元。 由于支票转账事务查询到了取款事务未提交的更新数据,并且在这个查询结果的基础上进行更新操作,如果取款事务最后被撤销,会导致银行客户损失100元。 

事务隔离级别

关于事务隔离级别,我们来看一下下面的两个图解:

                                  

                                    

由上图可以看出:隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。 对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读,而且具有较好的并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。 

下面我们就具体来看一下hibernate怎么来配置隔离级别:在Hibernate的配置文件中可以显式的设置隔离级别。每一种隔离级别都对应一个整数: 

1:Read Uncommitted 

2:Read Committed 

4:Repeatable Read 

8:Serializable 

例如,以下代码把hibernate.cfg.xml文件中的隔离级别设为Read Committed: 

hibernate.connection.isolation=2 

对于从数据库连接池中获得的每个连接,Hibernate都会把它改为使用Read Committed隔离级别。


转载地址:http://blog.youkuaiyun.com/csh624366188/article/details/7627693

10分钟解决Hibernate的事务管理,Hibernate当中要设置事务的隔离级别 一、事务 1、什么是事务: 事务:事物指的是逻辑上的一组操作,组成这一组操作的逻辑单元要么全成功,要么全失败 2、事务的特性: (1)原子性:代表事务不可分割。 (2)一致性:代表事务执行的前后,数据的完整性要保证一直。 (3)隔离性:代表的是一个事务执行的过程当中,不应该受到其他事务的干扰。 (4)持久性:代表一个事务执行完成后数据就持久到数据库当中(提交或回滚)。 3、如果我们不考虑事务的隔离性,就会引发一些安全性的问题 (一)读的问题 (1)脏读:一个事务读到另外一个事务未提交的数据 (2)不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致在前一个事务多次查询结果不一 立即下载

相关推荐

用Python+OpenCV搞定线激光相机标定:从棋盘格到3D点云的保姆级实战

本文详细介绍了使用Python和OpenCV进行线激光相机标定的全流程实战,从硬件准备到3D点云重建。涵盖相机内参标定、激光平面方程拟合、三维重建等关键技术,提供完整的代码实现和工程优化建议,帮助开发者实现毫米级精度的工业检测和三维测量系统。

weixin_29227425的博客 281

Hibernate中的事务隔离

 在我们的项目中,老发现程序报告sesssion is closed或者因数据已经被其他事务修改而导致当前事务无法提交,由于系统的运行用户最多也就几十个人,所以考虑使用严格的事务隔离来防止这种类型的问题的出现。或许不能完全解决session is closed的问题(我们怀疑是项目中所使用的jbpm存在bug导致的)。 1、事务隔离事务隔离意味着对于某一个正在运行的事务来说,好像系统中

甘琤的专栏 1581

MAX96712在车载摄像头系统中的带宽分配与传输能力计算解析

在计算摄像头带宽与传输接口的关系时,需要考虑视频流的像素分辨率、帧率、颜色深度等因素。以 MAX96712 这种 GMSL2 产品为例,它支持每个链路在正向方向以 3Gbps 或 6Gbps 的固定速率工作。

weixin_43199439的博客 3324

hibernate设置事物隔离级别

1、事物的概念 事物指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功 2、事物的四大特性 (1)原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句, 要么全部执行成功,要么全部执行失败。 (2)一致性(Consis...

白面小生的博客 2220

EB Tresos激活失败?3种实用解决方案帮你搞定(含离线激活步骤)

本文针对EB Tresos软件激活失败问题,提供了三种实用的解决方案。详细分析了激活失败的常见根源,并系统阐述了在线环境下的排查步骤、无网环境下的离线激活全流程,以及高级许可证环境修复方法,帮助汽车电子工程师快速恢复开发环境。

milk8的博客 607

SIGIR 2026:信息检索前沿技术与投稿指南

信息检索(Information Retrieval, IR)是计算机科学中处理大规模数据检索的核心技术,其基本原理是通过算法模型从海量数据中高效提取相关信息。随着深度学习的发展,神经信息检索(Neural IR)和多模态检索成为研究热点,如稠密检索模型(DPR)和跨模态预训练(CLIP)等技术的应用显著提升了检索精度。这些技术不仅在学术领域具有重要价值,还在电商搜索、医疗检索等实际场景中展现出巨大潜力。SIGIR作为信息检索领域的顶级会议,汇聚了全球顶尖学者和工业界专家,是展示最新研究成果的重要平台。本文

weixin_29189363的博客 285

Hibernate中的事务与并发

事务的相关概念 什么是事务 事务是逻辑上的一组操作,组成事务的各个执行单元,操作要么全都成功,要么全部失败 转账的例子:小王给小李转钱,扣钱,加钱,两个操作组成了一个事务 ###事务的特性 原子性------事务的不可分割 一致性----事务执行的前后数据的完整性保持一致 隔离性-----一个事务执行的过程中,不应该受到其他的事务的干扰 持久性----事务一旦提交,数据就永久...

u011301372的博客 485

AI人工智能全模态大模型架构:推动智能交通发展的架构设计

本文旨在阐述全模态大模型在智能交通领域的架构设计原理和应用方法。我们将探讨如何利用多模态AI技术解决交通流量预测、事故预警、路线优化等关键问题。文章将从基础概念入手,逐步深入技术细节,最后探讨实际应用和未来发展方向。全模态大模型:能够处理和理解多种数据模态(如图像、文本、语音等)的大型AI模型智能交通系统(ITS):利用先进技术优化交通流量和安全性的综合系统多模态融合:将不同数据源的信息整合处理的技术核心概念回顾全模态大模型是能够处理多种数据类型的强大AI系统。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 834

Java程序员从笨鸟到菜鸟之(六十五)细谈Hibernate(十六)数据库事务与隔离级别...

数据库事务:事务是指一组相互依赖的操作行为,如银行交易、股票交易或网上购物。事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务失败。关于事务的一个经典例子就是:A到银行办理转账事务,把100元钱转到B的账号上,这个事务包含以下操作行为: (1)从A的账户上减去100元。 (2)往B的账户上增加100元。 显然,以上两个操作...

197

Qt(C++)使用QChart动态显示3个设备的温度变化曲线

Qt的QChart是一个用于绘制图表和可视化数据的类。提供了一个灵活的、可扩展的、跨平台的图表绘制解决方案,可以用于各种应用程序,如数据分析、科学计算、金融交易等。

1915

电机驱动和电源等大电流设计中的并联 MOSFET设计

在电机驱动等应用中,半桥拓扑(通常为 3 相)用于生成在电机中产生正扭矩或负扭矩的交流电源信号。想要更高的输出电流能力,只有通过并联形成每个功能开关的 MOSFET,才能实现高输出电流。当多个功率 MOSFET 并联以增加系统整体电流能力容量时,通常假设电流在并联器件之间均等分配或均等共享。然而,在并联 MOSFET 时,需要考虑并联器件之间的电流分配。PCB 布局的若干特性和特定的MOSFET 参数会影响这种分配,并在参数不匹配或布局不对称时导致均流不平衡。

小幽余生不加糖 2484

Hibernate常见配置

1.1事务 1.1.1回顾 事务:一组业务操作,要么全部成功,要么全部不成功。 特性:ACID 原子性:整体 一致性:数据 隔离性:并发 持久性:结果 隔离问题: 脏读:一个事务读到另一个事务未提交的内容 不可重复读:一个事务读到另一个事务已提交的内容(insert) 虚读(幻读):一个事务读到另一个事务已提交的内容(u...

weixin_41653442的博客 240

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Hibernate事务的隔离级别

一  数据库事务定义  数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。...

Little_Oranges的博客 678

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Hibernate设置事务的隔离级别

方式有两种: 1)修改配置文件hibernate.cfg.xml实现 ...... <!-- 事务隔离级别 0:TRANSACTION_NONE 1:TRANSACTION_READ_UNCOMMITTED 2:TRANSACTION_READ_COMMITTED 4:TRANSACTION_REPEATABLE_READ 8:TRANSA

yh_zeng2的博客 2900

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Hibernate中如何设置数据库事务隔离级别详解

本文详细介绍了如何在Hibernate框架中设置和管理数据库事务隔离级别,以确保并发环境下的数据一致性。Hibernate通过与JDBC连接或Spring事务管理器结合,提供了间接设置事务隔离级别的方法。文章首先概述了SQL标准定义的四种事务隔离级别(读未提交、读已提交、可重复读、串行化),然后讲解了在Hibernate中进行事务管理的基础操作,并进一步阐述了使用JDBC API或Spring事务管理器设置事务隔离级别的具体实现方式。最后强调了合理配置事务隔离级别对保障数据一致性和系统并发性能的重要性。

iwork168的博客 321

Hibernate中事务隔离级别

1)引入

cpf2016的专栏 1773

Hibernate事务隔离级别

Hibernate事务隔离级别: 隔离级别 脏读 (Dirty Read) 不可重复读 (NonRepeatable Read) 幻读 (Phantom Read) 读操作未提交 (Read uncommitted) 可能 可能 可能 读操作已提交 (Read commited)

smh821025的专栏 2307

Hibernate 事物隔离级别

一、数据库事务的定义 二、数据库事务并发可能带来的问题 三、数据库事务隔离级别 四、使用Hibernate设置数据库隔离级别 五、使用悲观锁解决事务并发问题 六、使用乐观锁解决事务并发问题     Hibernate事务与并发问题处理(乐观锁与悲观锁) 一、数据库事务的定义   数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。事

robbinBlog 649

hibernate 事务和隔离级别

本文主要是学习hibernate的数据库事务和隔离级别的设置 1、什么是数据库事务? 事务是数据库并发控制的基本单元,作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行,它具有原子性,一致性,隔离性,持久性。 2、事务并发有哪些问题? 1)第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。 在没有事务隔离的情况下,两个事务都同时更新一行数据,但是第二个事

pingnanlee的专栏 3597

Hibernate - 设置隔离级别

JDBC 数据库连接使用数据库系统默认的隔离级别. 在 Hibernate 的配置文件中可以显式的设置隔离级别. 每一个隔离级别都对应一个整数: 1. READ UNCOMMITED2. READ COMMITED4. REPEATABLE READ8. SERIALIZEABLE Hibernate 通过为 Hibernate 映射文件指定 hibernate.connection.isol...

weixin_30764771的博客 176

Hibernate框架学习_隔离级别以及管理事务操作

旧事重提: 事务的特性:ACDI原子性,一致性,一致性,隔离性) 事务的并发问题:脏读,不可重复读,幻读/虚读 事务的隔离级别:读未提交(未解决问题),读已提交(解决脏读),可重复读(解决脏读,不可重复读),串行化(全解决) 问题:如何在Hibernate中指定隔离级别? 1.查找Hibernate配置文件 路径:hibernate-release-5.4.2.Final\projec...

qq_38827988的博客 208

Hibernate事务隔离级别, 悲欢锁和乐观锁

Hibernate事务隔离级别:   如果没有锁定且多个用户同时访问一个数据库,当他们的事务同时使用相同的数据时可能会发生问题.由于并发操作带来的数据不一致包括: 丢失数据(lost update) 修改,读”脏”数据(脏读 dirty read) 虚读(phantom read) 不可重复读(unrepeated read) 第二类丢失更新(second lost updates): 丢...

zs1342084776的博客 962
上一篇: Struts2核心工作原理解析
下一篇: Hibernate事务与并发问题处理(乐观锁与悲观锁)
andyLiuJava
博客等级 码龄14年 0粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值