事务隔离机制(尚学堂)

事务的四个特性:ACID

     Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)

事务并发时可能出现的问题:

  第一类丢失更新(Lost Update)   (可以忽略)

  脏读(dirty read)

      不可重复读(non-repeatable read)

      第二类丢失更新(second lost update problem)(不可重复读的特殊情况)

      幻读(phantom read)

为了解决上述问题,数据库提供了四种事务隔离机制

      1、read-uncommitted        会出现dirty read,phantom-read,non-repeatable read

  2、read-committed            不会出现dirty read,因为只有另一个事务提交才会读出结果,但仍然                                              会出现non-repeatable read和phantom read。

      4、repeatable read

      8、serializable                   不会出现任何问题

设定hibernate的事务隔离级别

      1、hibernate.connection.isolation=2    为了考虑效率问题一般设置成2

   2、用悲观锁解决repeatable read问题(依赖于数据库的锁)

      1) select ... for update

      2) load(xx.class,i,LockMode.Upgrade)

          a) LockMode.None 无锁,Transaction结束时,自动切换到此模式

            b) LockMode.read 在查询的时候 hibernate会自动获取锁

          c) LockMode.write   insert update hibernate会自动取消锁

          d) 以上3种锁的模式,是hibernate内部使用的

       3、Hibernate[JPA] 乐观锁定(ReadCommitted)

            1) @Version  乐观锁使用版本控制

 

posted @ 2013-09-21 16:34  Ars_blog  阅读(259)  评论(0编辑  收藏  举报