【hibernate框架】事务并发处理

  1. 云栖社区>
  2. 博客>
  3. 正文

【hibernate框架】事务并发处理

光仔december 2015-03-10 15:33:00 浏览748
展开阅读全文
事务并发处理:
a)事务:ACID(事务的四个特性)
   i.Atomic(原子性)、Consistency(一致性)、Itegrity(独立性)、Durability(持久性)
A:要么全部执行,要么不执行。
C:事务的运行不该变数据库中数据的一致性。
I:两个以上的事务不会出现交错执行的状态。
D:事务运行以后,系统的更新是永久的,不会无缘无故的回滚。


b)事务并发时可能出现的问题(参考孙卫琴的表)
1.第一类丢失更新(Lost Update)



2.脏读(duty read)



3.不可重复读(non-repeatable read)


4.第二类丢失更新(second lost update problem)


5.幻读(phantom read)重点说的是插入删除的操作



数据库的隔离机制:
不让它并发,在一定的时候处理它并发的问题,隔离它们,不让它们相互影响。
有四种隔离机制:(1.2.4.8)
1.read-uncommitted:能够去读那些没有提交的数据(允许脏读的存在)
2.read-committed:不会出现脏读,因为只有另一个事务提交才会读取来
结果,但仍然会出现不可重复读和幻读现象。
4.repeatable read:MySQL默认。可重复读,读数据读出来之后给它加把锁,
其他人先别更新,等我用完了你再更新。你的事务没完,其他事务就不可能改这条记录。
8.serializable:序列化,最高级别。一个一个来,不去并发。效率最低。
每一种数据库支持的隔离机制不一样(但大致少不了这四种)
设立级别的时候,一般会设立为2,避免脏读,并发性好。


查询数据库隔离机制的语句:select @@tx_isolation


对于hibernate,要想处理多个事务之间的并发,也得去设定事务的隔离级别。
也是上面4种。
设定hibernate的事务隔离级别
1.hibernate.connection.isolation=2(值是1,2,4,8)

2.用悲观锁、乐观锁

在我的另外一篇学习总结中有关于悲观锁和乐观锁在hibernate中的应用:http://blog.csdn.net/acmman/article/details/44176281

转载请注明出处:http://blog.csdn.net/acmman/article/details/44176065

网友评论

登录后评论
0/500
评论
光仔december
+ 关注