事务:逻辑上的一组操作,要么全部成功,要么全部失败。
事务的特性:
1.原子性:事务不能分离
2.隔离性:执行一个事务的时候,不能受到其他事务的干扰
3.持久性:事务完成后,事务便持久到数据库当中
4.一致性:事务执行前后,数据的完整性要保持一致
如果不考虑隔离性,会引发安全问题
读问题:
(1)脏读:一个事务读到另一个事务未提交的数据
(2)不可重复读:一个事务读到另一个事务已经提交的update数据,导致一个事务中多次查询的结果不一致
(3)虚读、幻读:一个事务读到另一个事务已经提交的insert数据,导致一个事务中多次查询的结果不一致
写问题:
丢失更新
事务的隔离级别:
Read uncommitted 所有问题还是会发生
Read committed 解决脏读
Repeatable read 解决脏读和不可重复读
Serializable 可解决所有问题 效率低
hibernate设置事务隔离级别
<property name="hibernate.connection.isolation">4</property>
1 2 3 4隔离级别依次增强
开启getCurrentSession 创建一个session 绑定到当前线程中 即整个线程中session都是同一个对象,默认是不开启的,要手动开启
<property name="current_session_context_class">thread</property>