一、什么是事务
事务:事务指的是逻辑上的一组操作,组成这组操作的各个逻辑单元要么全部成功,要么全部失败。
二、事务特性
原子性:代表事务不可分割。
一致性:代表事务执行的前后,数据的完整性要保持一致。
隔离性:代表一个事务执行的过程中,不应该受到其他事务的干扰。
持久性:代表事务执行完成后,数据就持久到数据库中。
三、不考虑隔离性会引发的安全性问题
a)读问题
脏读: 一个事务读到另一个事务未提交的数据。
不可重复读: 一个事务读到另一个事务已经提交的update数据,导致在前一个事务多次查询结果不一致。
虚读: 一个事务读到另一个事务已经提交的insert数据,导致在前一个事务多次查询结果不一致。
b)写问题
两类丢失更新
四、读问题的解决
a)设置事务的隔离级别
Read uncommitted :以上读问题都会发生。
Read committed :解决脏读,但是不可重复读和虚读有可能发生。(Oracle默认使用)
Repeatable read :解决脏读和不可重复读,但是虚读有可能发生。(MySQL默认使用)
Serializable :解决所有读问题。(效率比较低)
五、Hibernate事务级别设置
在hibernate.cfg.xml文件中设置
<!--
事务级别管理
1—Read uncommitted isolation
2—Read committed isolation
4—Repeatable read isolation
8—Serializable isolation
-->
<property name="hibernate.connection.isolation">4</property>