hibernate笔记06 hibernate事务代码规范写法

Hibernate事务操作

--事务相关概念


1.什么是事务
   事务是操作中最基本的单元,事务表示一组操作,要么都成功 ,有一个失败,其他的都失败

2.事务特性

       事务具备原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)4个属性,简称ACID。下面对这4个特性分别进行说明。

(1)原子性:将事务中所做的操作捆绑成一个原子单元,即对于事务所进行的数据修改等操作,要么全部执行,要么全部不执行。

(2)一致性:事务在完成时,必须使所有的数据都保持一致状态,而且在相关数据中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构都应该是正确的。

(3)隔离性:由并发事务所做的修改必须与任何其他事务所做的修改相隔离。事务查看数据时数据所处的状态,要么是被另一并发事务修改之前的状态,要么是被另一并发事务修改之后的状态,即事务不会查看由另一个并发事务正在修改的数据。这种隔离方式也叫可串行性。

(4)持久性:事务完成之后,它对系统的影响是永久的,即使出现系统故障也是如此。



3.不考虑隔离性产生问题
(1)脏读
   t1开始事务
       t2开始事务
       t3查询存款余额为1000元
       t4
       t5取出100元,把存款余额改为900元
       t6查询账户余额为900元(脏读)
       t7撤销事务,账户的存款余额恢复为1000元
       t8汇入100元,存款余额改为1000元
       t9提交事务

(2)不可重复读
t1开始事务
       t2开始事务
       t3查询账户余额为1000元                                                               
       t4查询账户余额为1000元
       t5取出100元,余额改为900元
       t6提交事务
       t7查询账户余额为900元
       t8到底余额是1100元还是900+100元?

(3)虚读
         t1开始事务
       t2开始事务
      t3统计网站注册人数为1000人
       t4注册一个新用户
       t5提交事务
       t6统计网站注册人数为1000人(虚读)
       t7到底哪个统计数据有效?

4.设置事务隔离级别
   锁机制能解决各种并发问题,但是会影响并发性能,为了能让用户根据实际应用的需要,在事务的隔离性和并发性之间做出合理权衡,数据库系统提供了四种事务隔离级别供用户选择:
 8 Serializable:串行化  完全看不到其他事务的更新,串行等待
 4 Repeatable Read:可重复读  事务可看到其他事务已提交的新插入记录,但是不能   看到其他事务对已有记录的更新
 2 Read Commited:读已提交数据  事务可看到其他事务已提交的新插入记录,还能看   到其他事务已经提交的对已有记录的更新
 1 Read  Uncommited: 读未提交数据  事务可看到其他事务没有提交的新插入记录,    还能看到其他事务没有提交的对已有记录的更新
   优先考虑隔离级别为Read Commited,能避免脏读,有较好的并发性能,可能会导致    不可重复读、虚读和第二类丢失更新,但是可以采用悲观锁或乐观锁来控制。


mysql默认级别repeatable read

--Hibernate事务代码规范写法

1.代码结构

try{
开启事务
提交事务
}catch{
回滚事务
}finally{
关闭
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值