文档章节

hibernate事务管理

huoyoung
 huoyoung
发布于 2016/06/15 20:43
字数 887
阅读 14
收藏 1

事务的特性

1. 原子性(atomic),事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行

2. 一致性(consistent),事务在完成时,必须使所有的数据都保持一致状态。

3. 隔离性(isolation),由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。

4. 持久性(Duration),事务完成之后,它对于系统的影响是永久性的。

注:事务的ACID特性是由关系数据库管理系统(RDBMS)来实现的。

数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。

数据库管理系统采用锁机制来实现事务的隔离性。当多个事务同时更新数据库相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。

数据库事务并发可能带来的问题:

第一类丢失更新(lost update):两个事物更新同一条数据资源,某一事物异常终止,回滚造成第一个完成的更新也同时丢失。

脏读(dirty read):如果第二个事务查询到第一个事务还未提交的更新数据,形成脏读。

虚读(phantom read):一个事务执行两次查询,造成两次结果不一致。

不可重复读(unrepeated read):一个事务两次读取同一行数据,结果得到不同状态结果。

第二类丢失更新(second lost updates):是不可重复读的特殊情况,如果两个事务都读取同一行,然后两个都进行写操作,并提交,第一个事务所做的改变就会丢失。

数据库系统提供四种事务隔离级别:

Serializable 串行化                 :第一个完成,第二个才开始

Repeatable Read 可重复读      :同时读

Read Commited 可读已提交      :第一个只有在提交过后,第二个才可以操纵

Read Uncommited 可读未提交  :第二个可以操纵第一个还没提交的数据

在Hibernate的配置文件中可以显示的配置数据库事务隔离级别。每一个隔离级别用一个整数表示:

8 - Serializable 串行化

4 - Repeatable Read 可重复读

2 - Read Commited 可读已提交

1 - Read Uncommited 可读未提交

在hibernate.cfg.xml中使用hibernate.connection.isolation参数配置数据库事务隔离级别。

<session-factory>

…..

//把隔离级别设置为4

<property name="hibernate.connection.isolation">4</property>

……

</session-factory>

设置之后,在开始一个事务之前,Hibernate将为从连接池中获得的JDBC连接设置级别。需要注意的是,在受管理环境中,如果Hibernate使用的数据库连接来自于应用服务器提供的数据源,Hibernate不会改变这些连接的事务隔离级别。在这种情况下,应该通过修改应用服务器的数据源配置来修改隔离级别。

© 著作权归作者所有

huoyoung
粉丝 1
博文 23
码字总数 14517
作品 0
浦东
私信 提问
开源Java事务管理器--TransactionEssentials

Atomikos 公司的 TransactionEssentials 是一个基于Java的开源事务管理器,提供了事务管理和连接池,不需要应用服务器支持,支持JDBC和JMS事务,能提供对Spring,Hibernate的集成,有兴趣多了...

匿名
2010/03/21
1K
0
整合hibernate4到spring4mvc框架

1.总体设计思路 写一个HibernateDao的公共接口HibernateCommonDao,实现基本的增删改查HibernateCommonDaoImpl,所有的具体业务类DaoImpl都继承自HibernateCommonDaoImpl并且implements它自己...

阿宇_
2015/09/15
646
0
Hibernate与JdbcTemplate共享事务管理

在Spring和Hibernate的配置文件中,我们可以对类中的方法进行事务控制,也就是说某个方法中含有多个数据库的写操作,我们可以通过创建一个Spring中的HibernateTransactionManager实例,把相应...

安克诚
2012/09/11
194
0
Flex+Spring中jdbcTemplate与hibernate共享事务管理

HibernateTemplate一般是为了加快开发效率,还有就是使用Hibernate的时候,更简洁,更便利,而统一的声明事务,又让本来就已经很简洁的Hibernate对事务的处理,大大简化 但任何事务都有两面性,在带...

ulyn
2012/12/23
1K
0
Spring的事务管理难点剖析(1):DAO和事务管理的牵绊

有些人很少使用Spring而不使用Spring事务管理器的应用,因此常常有人会问:是否用了Spring,就一定要用Spring事务管理器,否则就无法进行数据的持久化操作呢?事务管理器和DAO是什么关系呢?...

icheer
2012/07/17
90
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊nacos的notifyConfigInfo

序 本文主要研究一下nacos的notifyConfigInfo CommunicationController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/CommunicationController.java @Cont......

go4it
昨天
2
0
队列-顺序(c/c++实现)

队列是在线性表功能稍作一改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。 队列(顺序)实现的三个步骤: 定义所需的功能(...

白客C
昨天
5
0
安装tomcat部署网站/nginx代理tomcat/tomcat部署多个网站

来源:https://blog.csdn.net/Powerful_Fy 安装jdk: Oracle官方下载 https://www.oracle.com/technetwork/java/javase/downloads/index.html yum安装openjdk: 1.查找可使用的jdk包: [roo......

asnfuy
昨天
4
0
Linux 安装 Android studio

官网下载linux 版本 android xxxxx-xxxx.tar.gz 然后 找到它 解压缩 得到 android-studio文件夹 执行 [root@monkey java]# mv ./android-studio /opt [root@monkey java]# cd /opt/android-s......

MrLins
昨天
6
0
VMware vSphere虚拟机的迁移

VMware vSphere 6.7下,虚拟机的迁移按照移动的内容,可以分为4种: 1)冷迁移(cold migration) 2)热迁移(vMotion) 3)存储热迁移(storage vMotion) 4)完全热迁移(shared-nothing ...

大别阿郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部