我们在Hibernate的Environment.java文件中可以看到下面的注释:
*
*
| hibernate.connection.isolation |
*
| JDBC transaction isolation level (only when using * java.sql.DriverManager) * |
*
这说明我们可以在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标准对事务隔离级别的规定,是按该级别不可能发生什么问题来确定的,不一定会发生这样的
问题;所以,不同的数据库对事务隔离的级别约定不一样,比如,有的数据库把 可重复读级别 按 可串行化来
对待.
3877

被折叠的 条评论
为什么被折叠?



