Hibernate中事务的管理

本文介绍了Hibernate中事务管理的基本概念,包括事务的四大特性:原子性、一致性、隔离性和持久性。讨论了如果不考虑隔离性可能引发的脏读、不可重复读和幻读等问题,以及不同隔离级别的特点,如Oracle和MySQL的默认设置。同时,阐述了在Hibernate中设置事务隔离级别的方式,并详细说明了Hibernate5提供的三种事务管理方式:线程绑定、JTA事务绑定和程序管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate中事务的管理

1、什么是事务?

事务:transaction,指的是业务逻辑的最小单元,由一组DML语句操作,执行要么全部成功,要么全部失败。


2、事务的四大特性

原子性:事务是业务逻辑的最小单元,不可分割。

一致性:事务由一组DML语句操作组成,要么全部执行成功,要么全部失败。

隔离性:事务A的执行与事务B隔离,不受其他事务的影响。

持久性:事务执行的结果,必须持久化保存到硬盘上的数据库中。


3、如果不考虑隔离性,引发的安全问题

读的问题:
脏读:一个事务读到另一个事务还未提交的数据。
不可重复读:一个事务读到另一个事务已经提交的update数据,造成多次查询结果不一致。
幻读:一个事务读到另一个事务已经提交的insert数据,造成多次查询结果不一致。

写的问题(了解):
丢失更新。也就是更新覆盖。


4、事务的隔离级别

读未提交:Read uncommitted,最低级别,以上问题都会发生。

读已提交:Read committed,解决了脏读,但是不可重复读和幻读有可能发生。

可重复读:Repeated read,解决了脏读、不可重复读,但是幻读可能发生。

可串行化:Serializable,事务同步执行,解决了所有的问题,但是效率就变低了。

Oracle默认使用第二种:读已提交。
MySQL默认使用第三种:可重复读。


5、Hibernate中设置事务的隔离级别

在核心配置文件hibernate.cfg.xml的<session-factory>标签中配置:

<!-- 设置事务的隔离级别,MySQL默认是4,即可重复读 -->
<property name=”hibernate.connection.isolation”>4</property>

可选值有:
读未提交:1
读已提交:2
可重复读:4
可串行化:8


6、Hibernate中的事务管理

Hibernate内部已经把这个事情做了,只需要我们完成一段配置信息即可。

Hibernate5提供了三种管理Session对象的方法:
Session对象的生命周期与本地线程绑定。
Session对象的生命周期与JTA事务绑定。
Hibernate委托程序管理Session对象的生命周期。

在Hibernate核心文件hibernate.cfg.xml的<session-factory>标签中配置:

<!-- 配置当前线程绑定的事务 -->
<property name=”hibernate.current_session_context_class”>thread</property>

可选值有:
thread:Session对象的生命周期与本地线程绑定。
jta:Session对象的生命周期与JTA事务绑定。
managed:Hibernate委托程序管理Session对象的生命周期。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值