一、概述
- 事务
事务就是逻辑上的一组操作,要么全都成功,要么全都失败!!!
事务特性
- 原子性:事务一组操作不可分割.
- 一致性:事务的执行前后,数据完整性要保持一致.
- 隔离性:一个事务在执行的过程中不应该受到其他事务的干扰.
- 持久性:一旦事务结束,数据就永久保存数据库.
如果不考虑事务的隔离性引发一些安全性问题:
5大类问题:3类读问题 2类写问题.
读问题:
- 脏读: 一个事务读到另一个事务未提交数据.
- 不可重复读: 一个事务读到另一个事务已经提交数据(update),导致查询结果不一致.
- 虚读: 一个事务读到另一个事务已经提交的数据(insert),导致查询结果不一致
避免三种读的问题:
- 设置事务的隔离级别:
- 未提交读:以上三种读问题 都有可能发生.
- 已提交读:避免脏读,但是不可重复读和虚读有可能发生.
- 重复读:避免脏读和不可重复读,但是虚读是有可能发生.
- 串行的:可以避免以上三种读问题.
- 设置事务的隔离级别:
在Hibernate中设置事务的隔离级别:
- 在核心配置文件中:
4
写问题:丢失更新
- 解决
- 悲观锁:
- 乐观锁;
- 解决
线程绑定的session:
- 在Hibernate.cfg.xml中配置一个:
thread - 使用SessionFactory中的getCurrentSession();方法.
- 底层就是ThreadLocal.
- 在Hibernate.cfg.xml中配置一个:
当前线程中的session不需要进行关闭,线程结束后自动关闭!!!