随笔-57  评论-202  文章-17  trackbacks-0
      事务的4个基本特性(ACID):
      1. Atomic(原子性):事务中包含的操作被看作一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。
      2. Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。
      3. Isolation(隔离性):事务允许多个用户对同一个数据的并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
      4. Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。

      数据库操作过程中可能出现的3种不确定情况:
      1. 脏读取(Dirty Reads):一个事务读取了另一个并行事务未提交的数据。
      2. 不可重复读取(Non-repeatable Reads):一个事务再次读取之前的数据时,得到的数据不一致,被另一个已提交的事务修改。
      3. 虚读(Phantom Reads):一个事务重新执行一个查询,返回的记录中包含了因为其他最近提交的事务而产生的新记录。

      标准SQL规范中,为了避免上面3种情况的出现,定义了4个事务隔离等级:
      1. Read Uncommitted:最低等级的事务隔离,仅仅保证了读取过程中不会读取到非法数据。上诉3种不确定情况均有可能发生。
      2. Read Committed:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。
      3. Repeatable Read:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。
      4. Serializable:最高等级的事务隔离,上面3种不确定情况都将被规避。这个级别将模拟事务的串行执行。

      Hibernate将事务管理委托给底层的JDBC或者JTA,默认是基于JDBC Transaction的。
      Hibernate支持“悲观锁(Pessimistic Locking)”和“乐观锁(Optimistic Locking)”。
      悲观锁对数据被外界修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制。Hibernate通过使用数据库的for update子句实现了悲观锁机制。Hibernate的加锁模式有:
      1. LockMode.NONE:无锁机制
      2. LockMode.WRITE:Hibernate在Insert和Update记录的时候会自动获取
      3. LockMode.READ:Hibernate在读取记录的时候会自动获取
      4. LockMode.UPGRADE:利用数据库的for update子句加锁
      5. LockMode.UPGRADE_NOWAIT:Oracle的特定实现,利用Oracle的for update nowait子句实现加锁
      乐观锁大多是基于数据版本(Version)记录机制实现。Hibernate在其数据访问引擎中内置了乐观锁实现,可以通过class描述符的optimistic-lock属性结合version描述符指定。optimistic-lock属性有如下可选取值:
      1. none:无乐观锁
      2. version:通过版本机制实现乐观锁
      3. dirty:通过检查发生变动过的属性实现乐观锁
      4. all:通过检查所有属性实现乐观锁
posted on 2005-07-08 16:19 小米 阅读(4833) 评论(4)  编辑  收藏 所属分类: Hibernate

评论:
# re: 《深入浅出Hibernate》读书笔记(4)——事务管理 2005-07-09 23:45 | bjug
我们已经收到您的汇款和来信,并于7月6日晚18:23回复了您的邮件,今天看看到您在网站上的留言,猜测您还没有收到邮件,所以只好在这里回复您了。感谢您的真诚帮助,如果对我们的募捐活动有任何建议请与我们联系:)。
再次代表王俊对您的关心表示感谢  回复  更多评论
  
# re: 《深入浅出Hibernate》读书笔记(4)——事务管理 2005-07-10 22:40 | 小米
啊,很抱歉,我已经收到你们回复的邮件了,一忙就忘记回复了。让你们惦记着这事,实在抱歉。你们也辛苦了。:),再次祝福王俊早日康复。  回复  更多评论
  
# re: 《深入浅出Hibernate》读书笔记(4)——事务管理 2006-03-24 16:12 | 漂浮不定
关注  回复  更多评论
  
# re: 《深入浅出Hibernate》读书笔记(4)——事务管理 2007-03-30 15:57 | 超时空要塞
感觉hibernate使用jdbc事务管理不是很好,这削弱了dao类的控制能力,需要容器、框架对事务的支持  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: