细谈Hibernate数据库事务与隔离级别

【大话Hibernate】hibernate事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰。 数据库向用户提供保存当前程序状态的方法,叫事务提交(commit);当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法叫事务回滚(rollback)。1、事务的特性事务具备原子性(Atomicity)、一致性(Consistenc 阅读详情
数据库事务 :事务是指一组相互依赖的操作行为,如银行交易、股票交易或网上购物。事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务失败。关于事务的一个经典例子就是: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():撤销事务 

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

  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


Java 里 Hibernate 的并发事务隔离级别 本文旨在全面解析 Hibernate 框架中的事务隔离级别机制,帮助开发者理解并发事务处理的核心概念,掌握在 Hibernate 应用中正确配置和使用事务隔离级别的方法。讨论范围包括标准隔离级别的定义、Hibernate 的实现方式、性能考量以及实际应用案例。文章首先介绍事务隔离的基本概念,然后深入分析四种标准隔离级别,接着探讨 Hibernate 的具体实现方式,最后通过实际案例展示隔离级别的应用和性能影响。事务(Transaction): 一组原子性的数据库操作序列。 阅读详情

相关推荐

hibernate简介: 事务、缓存

13.事务 数据库事务(DatabaseTransaction) ,是由一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单位。必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。 原子性(Atomic) 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性(Consistency) 数据库的事务不能破坏关系型...

专注于计算机研发知识和资讯分享 2万+

Hibernate中的事务隔离

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

甘琤的专栏 1582

10分钟解决Hibernate的事务管理,Hibernate当中要设置事务的隔离级别

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

hibernate设置事物隔离级别

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

白面小生的博客 2220

手把手教你配置SAP PP供应区域(Supply Area):实现线边仓精准发料与物料流优化

本文详细解析了SAP PP供应区域(Supply Area)的配置方法,帮助企业实现线边仓精准发料与物料流优化。通过三级优先级逻辑和四步配置法,系统可自动识别最优组件来源位置,显著提升生产订单处理效率和库存准确率。文章还提供了典型问题解决方案和性能优化技巧,适用于离散制造和重复制造场景。

weixin_29275257的博客 434

LaTeX参考文献格式apsrev4-1,增加文献标题

APS的LaTeX参考文献格式apsrev4-1是隐藏标题的,如果想要出现标题,需要更改apsrev4-1.bst文件内容 在apsrev4-1.bst文件靠后部分,定义不同类型文献格式的地方,将article类型的内容替换为, FUNCTION {article} { output.bibitem format.authors booktitle empty$ { "author" output.check }{ output } if$ author format.

loading1234567的博客 5031

Hibernate中的事务与并发

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

u011301372的博客 486

pgpool-II踩坑日记两则

最近结合pgpool-II进行postgreSQL高可用的部署,过程非常煎熬,作为新手,公司也没有前辈熟悉postgreSQL,只能自己摸索。好在已经搞明白了,把困扰我很长时间的两个问题分享一下。 1. show pool_nodes 第一个问题就是 show pool_nodes 的使用,照着教程建好后,在哪里执行这个指令呢?我在pg服务器上怎么执行这个指令都显示 ERROR: unrecognized configuration parameter "pool_nodes",一度怀疑人生。翻阅了很多资料

zhaizhai6_6的博客 4540

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

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

197

超详细MySQL 8.0安装与配置

MySQL的安装与配置 还不会安装MySQL的同学们,还不会配置MySQL的同学们,赶紧按照下面步骤操作起来,超详细安装步骤如下: 进入MySQL官网 1、点击download 2、点击MySQL Community Server 3、选好选项点击go to download page 4、点击download 5、点击no thanks,just start my download 6、选Server only,点击Next 7、点击Execute 8、点击

Turniper的博客 8756

Yolov5自学笔记之一--从入门到入狱,功能强大不要乱用(实现yolov5的基本功能使用流程及训练自己的数据集)

零基础自学yolov5,学会简单使用和训练自己的数据集,在自己工作中使用

qq_41597915的博客 1万+

Hibernate常见配置

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

weixin_41653442的博客 240

基于STM32与毫米波雷达的非接触式睡眠监测系统

物联网和嵌入式系统技术正在推动医疗健康设备的智能化发展。通过传感器网络采集生理信号,结合信号处理算法实现健康监测已成为主流技术方案。毫米波雷达凭借其非接触检测特性,在呼吸、心率等生命体征监测中展现出独特优势。STM32系列MCU凭借丰富外设和低功耗特性,成为医疗级嵌入式设备的首选平台。本系统整合60GHz毫米波雷达、红外测温与无线传输模块,构建了完整的睡眠质量评估解决方案,其硬件架构设计、信号处理算法和低功耗优化策略对可穿戴医疗设备开发具有参考价值。

weixin_36369848的博客 613

111---细谈Hibernate数据库事务与隔离级别

细谈Hibernate数据库事务与隔离级别 标签: hibernate数据库数据库连接池jdbcsql生活 2012-06-08 00:13 2378人阅读 评论(0) 收藏 举报  分类:   hibernate(5)  数据库事务:事务是指一组相互依赖的操作行为,如银行交易、股票交易或网上购物。事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要

lixiao1048的博客 339

Linux ARM平台开发系列讲解(LED) 2.1.1 如何点亮一个LED之添加设备树信息

1. 设备树添加设备信息 我拿到的开发板上有两颗LED供用户编程使用,分别是GPIO5_IO8和GPIO5_IO9,设备信息如下,不同板子的设备定义不同,根据自己的实际情况进行添加。 2. 编译设备树 根据自己拿到的SDK,执行编译命令,我这里拿到的SDK编译脚本为: ./build.sh kernel 3. 使用uuu工具烧录新编译好的内核 因为imx8 SDK设备树和内核是统一编译成一个镜像,所以只需要烧录内核,设备树文件也会烧录。 sudo uuu -b emmc imx-kernel.bin

DSMGUOGUO的博客 920

【Java面试题汇总】JVM篇(2026版)

JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优

种一棵树最好的时间是十年前,其次是现在 3万+

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

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

曹胜欢 9936

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

无向量功耗分析:早期芯片设计阶段功耗受限场景评估方法

芯片架构评估阶段,功耗估算是封装、电源方案制定的关键依据,但RTL未就绪、仿真波形缺失的现状让传统基于向量的功耗仿真难以落地。无向量功耗分析(Vectorless)凭借电路结构、活动因子与工艺库特性,在无需完整测试激励的前提下完成功耗估算,正成为早期设计唯一可执行的评估手段。其核心在于用统计概率描述信号翻转行为,结合动态功耗方程与漏电模型,在功耗受限场景(如满负载、待机、唤醒)下量化模块级功耗占比与峰值电流分布。该方法广泛应用于SoC前端规划、低功耗架构对比及电源网络预研,能够在两三周内输出可支撑评审的功耗

weixin_34021089的博客 352

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据库事务与隔离级别

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

jialinqiang的专栏 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Hibernate事务的隔离级别

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

Little_Oranges的博客 678

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

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

iwork168的博客 321

Hibernate中的Session的refresh()方法执行效果与数据库的隔离级别有关

//4. 执行保存操作 News news = (News) session.get(News.class, 4); System.out.println(news);//第一个输出News [id=4, title=4Java, author=地方, date=2017-02-18] //打断点,执行完第一个输出后,在数据库端把记录的author字段值改为sun,后继续执行代码 sessi

lengarry的博客 3835

HIbernate中的事务

什么时事务 在数据库操作中,一项事务(Transaction)是由一条或多条操作数据库的SQL语句组成的一个不可分割的工作单元。当事务中的所有操作都正常完成时,整个事务才能被提交到数据库中,如果有一项操作没有完成,则整个事务会被回滚。 其实事务总结起来理解为:逻辑上的一组操作,组成这组操作的各个单元,要么一起成功,要么一起失败。 事务的四个特性 事务由很严格的定义,需要同时满足四个特性,即原子性、...

吴声子夜歌的博客 2105

hibernate数据库事务的隔离级别

1.数据库的事务的隔离级别 查询mysql的数据库事务的隔离级别 注意: 问题:数据库查看事务隔离级别 select @@global.tx_isolation,@@tx_isolation; 报错: mysql> select @@global.tx_isolation,@@tx_isolation; ERROR 1193 (HY000): Unknown system ...

小匠心的博客 507
上一篇: Spring事务配置的五种方式
下一篇: JAVA深复制(深克隆)与浅复制(浅克隆)
wangzff
博客等级 码龄20年 22粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值