hibernate学习:事务相关知识

一:三种常见的事务异常:
脏读:读了另外一个事务的还没有提交的数据
不可重复读:同一个事务前后读到的数据不一致
幻读:读的过程中,另外一个事务可能添加或者删除数据,影响了当前事务的读取


二:数据库的事务隔离机制:
数据库事务的隔离级别有4个,
由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,
这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题


Read uncommitted:不能解上述三种异常
Read committed  :可以读没有提交的数据:可以解决脏读
Repeatable read: 可重复读。给数据加锁:可以解决不可重复读
Serializable:不允许并发。

事务级别越高,效率越低!
通常使用:Read committed



三:Hibernate设置隔离级别
每一种隔离级别对应着一个正整数。
Read Uncommitted: 1
Read Committed: 2
Repeatable Read: 4
Serializable: 8
在hibernate.cfg.xml中设置隔离级别如下:
    <session-factory>
<!-- 设置JDBC的隔离级别 -->
<property name="hibernate.connection.isolation">2</property>
</session-factory>
设置之后,在开始一个事务之前,Hibernate将为从连接池中获得的JDBC连接设置级别。
需要注意的是,在受管理环境中,如果Hibernate使用的数据库连接来自于应用服务器提供的数据源,

Hibernate不会改变这些连接的事务隔离级别。在这种情况下,应该通过修改应用服务器的数据源配置来修改隔离级别。


-----------------------------------!!!----------------------------------
事务级别通常使用:Read committed 解决了脏读,但是不能解决重复读问题,Hibernate可以通过加悲观锁,乐观锁来解决Repeatable read问题

你可能感兴趣的:(Hibernate,事务)