欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Hibernate】5.hibernate事务

程序员文章站 2022-05-09 15:59:03
...

1.数据库事务 

事务是指一组相互依赖的操作行为,如银行交易,股票交易等。事务的成功在于互相依赖的操作都执行成功,只要其中一个失败,则整个事务失败,需要回滚。

2.数据库事务的生命周期

【Hibernate】5.hibernate事务

3.数据库事务的四大特性  ACID

原子性(原子)

一致性(一致性)
隔离性(隔离)
持久性(持续时间)
4.声明事务边界

事务的开始边界:

事务的结束边界:提交事务,提交,保存被事务更新的数据库状态;

事务的异常边界:撤销事务,rolback,使事务退回到执行前的状态;

5.多个事务并发运行的并发问题

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

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

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

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

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

例如:

并发运行的两个事务易导致脏读

时间 取款事务 支票转账事务
T1 开始事务  
T2   开始事务
T3 查询账户的存款余额为1000元  
T4    
T5 取出100元,修改余额为900元  
T6   查询账户余额为900元(脏读)
T7 撤销该事务,把余额修改为1000元  
T8   汇入100元,账户余额修改为1000元
T9   提交事务

并发运行的两个事务易导致第二类丢失更新

时间 取款事务 支票转账事务
T1 开始事务  
T2   开始事务
T3 查询账户的存款余额为1000元  
T4   查询账户的存款余额为1000元
T5 取出100元,修改余额为900元  
T6 提交事务  
T7   汇入100元,账户余额修改为1100元
T8   提交事务

6.事务的隔离级别

隔离级别 是否出现第一类丢失更新
出现是否脏读
出现是否虚读
出现是否不可重复读
出现是否第二类丢失更新
序列化
可重复的阅读
阅读委托
阅读未定
隔离级别逐渐降低,即最高的隔离级别是序列化的,随着隔离级别的提高,并发性能降低。

设定隔离级别:

隔离级别越高,越能保证数据的完整性与一致性,但是对并发性能的影响也越大。

对于多数应用程序,可优先考虑将其数据库系统的隔离级别设为Read Commited,它能够避免脏读,并具有较好的并发性能,尽管会导致






 用SEESION来执行事务的流程

会话会话= factory.openSession();
交易tx;
尝试{
    //开始一个事务
    tx = session.beginTransaction();
    //执行事务
    ...
    //提交事务
    tx.commit();
catch(Exception e){
    //若出现异常,就撤销事务
    if(tx!= null)tx.rollback();
    扔e;
}最后{
    //不管事务执行成功与否,最后都关闭会话
    session.close();
}
















相关标签: 事务