Hibernate的事务处理

  1. 事务的概念
      事务是数据库操作中一个最小的执行单元,它由一组相互依赖的操作行为组成。例如,由查询和更新两个操作行为构成一个事务。事务的成功与否取决于这些操作行为是否都能执行成功。只要一个操作行为失败,那么整个事务执行失败。这时必须回滚到事务执行前的状态。
  2. 事务的特性
      数据库事务必须具有ACID特征,即Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。
      –原子性:是指整个数据库事务是一个不可分割的工作单元。只有事务中所有操作执行成功,该事务才算执行成功。如果事务中任何一个SQL语句执行失败,那么该事务失败。这时所有已执行成功的SQL语句也必须撤销,数据库应该回滚到执行该事务前的状态。
      –一致性:是指事务不能破坏关系数据的完整性和业务逻辑上的一致性。如果事务开始时系统处于一致状态,则不管事务执行成功还是失败,当其结束时系统也应处于一致状态。例如前面例子中,如果从user1中扣除100元,并且向user2中添加100元两个步骤中的任何一个操作不成功,则系统必须返回到用户取钱之前的状态。
      –隔离性:事务的隔离性要求事务访问的任何数据不会受到其他事务所做的任何改变的影响,直到该事务完成。
      –持久性:是指事务只要成功结束,它对数据库所做的操作必须永久的保存下来,即使系统发生崩溃,重启系统后,数据库还能恢复到事务成功结束时的状态。
  3. 数据库的隔离级别
      数据库的锁机制可以保证事务的隔离性,避免多个事务同时对同一资源进行操作。但是当锁的数目太多时,会影响数据库的并发性能。并发性能是指数据库系统同时给各种访问者提供服务的能力。例如当一个事务锁定某一个资源时,其他的事务必须停下来等待,这样就降低了数据库响应多个请求的速度。所以,为了能让用户根据实际需求,在事务隔离性和并发性之间做出合理的权衡,数据库系统提供了一下四中事务隔离的级别供用户选择。
      (1)Serializable(串行化)
      当数据库采用该级别(级别最高)进行隔离时,一个事务在执行的过程中完全看不到其他事务对数据库的更新。当两个事务同时访问同一资源时,如果一个事务已经开始访问该资源,则另一个事务必须停下来等待,直到前一个事务结束。
      (2)Repeatable Read(可重复读)
      当数据库采用这个级别进行隔离时,一个事务在执行的过程中可以看到其他事务已经提交的新插入的记录,但是看不到其他事务对已有记录的更新。
      (3)Read Committed(读已提交数据)
      当数据库采用该隔离级别时,一个事务在执行的过程中可以看到其他事务已经提交的新插入的记录,并且可以看到其他事务已经提交的对已有记录的更改。
      (4)Read Committed(读未提交数据)
      当数据库采用该隔离级别(级别最低)时,一个事务在执行过程中可以看到其他事物没有提交的新插入的记录,而且可以看到其他事务没有提交的对已有记录的更新。
      隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也大。对于多数数据库系统,可以优先考虑把隔离级别设置为Read Committed。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章