SQL事务隔离级别

来源:互联网 发布:mac os 照片 编辑:程序博客网 时间:2024/06/08 01:37

我们在Hibernate的Environment.java文件中可以看到下面的注释:
 * <tr>
 *   <td><tt>hibernate.connection.isolation</tt></td>
 *   <td>JDBC transaction isolation level (only when using
 *     <tt>java.sql.DriverManager</tt>)
 *   </td>
 * </tr>
 这说明我们可以在hibernate.cfg.xml中配置数据库的事务隔离级别,
 一般来说,数据库的隔离级别分类如下:
 
 SQL 事务隔离级别
隔离级别                     脏读(Dirty Read)  不可重复读(NonRepeatable Read)  幻读(Phantom Read) 
读未提交(Read uncommitted)  可能               可能                              可能 
读已提交(Read committed)  不可能               可能                              可能 
可重复读(Repeatable read)  不可能              不可能                            可能 
可串行化(Serializable )    不可能              不可能                            不可能

可不要小看这段注释,我今天就犯错了:

//.....事务A开始
Time_limit_process tlp=ProcessLimitFacade.getLimitByProcessID(dpDTO
                .getProcessInsCtrl());
tlp.setSTATUS(2);
ProcessLimitFacade.update(tlp);//这个方法使用另外的事务B
//......事务A结束

结果可想而知了!
难的是update方法中不抛错,程序就永久的停在了那个方法中,好像进入了一个黑洞.........

另外要提一点:SQL标准对事务隔离级别的规定,是按该级别不可能发生什么问题来确定的,不一定会发生这样的
问题;所以,不同的数据库对事务隔离的级别约定不一样,比如,有的数据库把 可重复读级别 按 可串行化来
对待.