【引用?/font> http://www.tkk7.com/georgehill/archive/2005/07/08/7374.html 

事务?个基本特性(ACIDQ:
      1. AtomicQ原子性)Q事务中包含的操作被看作一个逻辑单元Q这个逻辑单元中的操作要么全部成功Q要么全部失败?br>      2. ConsistencyQ一致性)Q只有合法的数据可以被写入数据库Q否则事务应该将其回滚到最初状态?br>      3. IsolationQ隔L)Q事务允许多个用户对同一个数据的q发讉KQ而不破坏数据的正性和完整性。同Ӟq行事务的修改必M其他q行事务的修改相互独立?br>      4. DurabilityQ持久性)Q事务结束后Q事务处理的l果必须能够得到固化?

      数据库操作过E中可能出现?U不定情况Q?br>      1. 脏读取(Dirty ReadsQ:一个事务读取了另一个ƈ行事务未提交的数据?br>      2. 不可重复dQNon-repeatable ReadsQ:一个事务再ơ读取之前的数据Ӟ得到的数据不一_被另一个已提交的事务修攏V?br>      3. 虚读QPhantom ReadsQ:一个事务重新执行一个查询,q回的记录中包含了因为其他最q提交的事务而生的新记录?br>
      标准SQL规范中,Z避免上面3U情늚出现Q定义了4个事务隔ȝU:
      1. Read UncommittedQ最低等U的事务隔离Q仅仅保证了dq程中不会读取到非法数据。上?U不定情况均有可能发生?br>      2. Read CommittedQ大多数L数据库的默认事务{Q保证了一个事务不会读到另一个ƈ行事务已修改但未提交的数据,避免?#8220;脏读?#8221;。该U别适用于大多数pȝ?br>      3. Repeatable ReadQ保证了一个事务不会修改已l由另一个事务读取但未提交(回滚Q的数据。避免了“脏读?#8221;?#8220;不可重复d”的情况,但是带来了更多的性能损失?br>      4. SerializableQ最高等U的事务隔离Q上?U不定情况都将被规ѝ这个别将模拟事务的串行执行?

      Hibernate事务管理委托给底层的JDBC或者JTAQ默认是ZJDBC Transaction的?br>      Hibernate支持“悲观锁(Pessimistic LockingQ?#8221;?#8220;乐观锁(Optimistic LockingQ?#8221;?br>      悲观锁对数据被外界修Ҏ保守态度Q因此,在整个数据处理过E中Q将数据处于锁定状态。悲观锁的实玎ͼ往往依靠数据库提供的锁机制。Hibernate通过使用数据库的for update子句实现了悲观锁机制。Hibernate的加锁模式有Q?br>      1. LockMode.NONEQ无锁机?br>      2. LockMode.WRITEQHibernate在Insert和Update记录的时候会自动获取
      3. LockMode.READQHibernate在读取记录的时候会自动获取
      4. LockMode.UPGRADEQ利用数据库的for update子句加锁
      5. LockMode.UPGRADE_NOWAITQOracle的特定实玎ͼ利用Oracle的for update nowait子句实现加锁
      乐观锁大多是Z数据版本QVersionQ记录机制实现。Hibernate在其数据讉K引擎中内|了乐观锁实玎ͼ可以通过class描述W的optimistic-lock属性结合version描述W指定。optimistic-lock属性有如下可选取|
      1. noneQ无乐观?br>      2. versionQ通过版本机制实现乐观?br>      3. dirtyQ通过查发生变动过的属性实C观锁
      4. allQ通过查所有属性实C观锁