传智播客java培训2010年4月27日hibernate学习
今天上课状态不错,看无论如何以后得晚上一点钟之前睡觉,每天至少得保证六个小时的睡眠时间,今天上课的整体情况不错,对UML有了一定的了解,对建模也有一定的认识。前几天上课的HIBERNATE却不是很乐观,所以,今天的任务仍然是复习HIBERNATE的学习,把没有跟上的课程赶上,五一放假过后,就要开始做项目了,现在真不能欠债。终于啊,北京的树枝开始长新叶了,朋友早上提起时才发现的呵,看来灰蒙蒙有天气有所好处了。
HIBERNATE事务管理:
基本特性:
1.原子性
是指HIBERNATE一个事务中的所有操作比所一个单元,单元中的所有操作组成一个原子操作,所有成功才成功,只要有一个失败则都失败。
2.一致性
保证操作数据后在逻辑上要保持一致。
3.隔离性
指事务间的相互隔离,多人操作时,每人可以处理自己的事务,之间必须互不干扰。
4.持久性
数据库中的数据都写入硬盘中,如发生什么突发情况,数据库要保证未结束的时间要撤销,要保证数据。
事务分类:
1.编程式
使用JDBC,JTA相关框架的API以编码方式设置事务的边界和隔离级别信息。
JDBC Connection类的事务控制方法:
setAutoCommit(boolean autoCommit) 设置是否自动提交事务,默认自动
commit() 提交事务
rollback() 撤销事务
2.声明式
依赖应用服务器提供的服务,或者相关框架在配置文件中设置事务的边界和隔 离等级,不需要在程序中编写代码。
关发访问数据可能引发的问题:
不同事务同时操作相同数据,如果没有合理控制,会在并发操作的数据上产生不一致的问题。可能会导致5类并发问题:
1. 第一类丢失更新:撤销一个事务时,把其他事务已提交的更新覆盖
2. 脏读:一个事务读到另一事务未提交的更新数据
3. 虚读:一个事务读到另一事务已提交的新插入的数据
4. 不可重复读:一个事务读到另一事务已提交的更新数据
5. 第二类丢失更新:一个事务覆盖另一事务已提交的更新数据,不可重复读的特例
事务隔离级别:
1.read uncommited.
可读已更新未提交,查未提交前不允许其他事务写入。可能出现脏读的情况。
2.Read commited
可读已提交,不可读沿未提交.有可能出现第二类丢失。
3.Repeatable read
一个事务已读取的数据不允许其他事务写入
4.Serializable
不能并发执行。
事务隔离级别的选择:
1.4较少,23居多
锁:
HIBERNATE中6种不同的锁模式:
1.LockMode.NONE
2.lockMode.READ
3.lockMode.write
4.lockMode.upgrade
5.lockMode.upgrade_nowait
6.lockMode.Force
通过乐观锁的设置与Read commited可的避免有 第二类丢失。
通过今天的复习,对HIBERNATE的事务处理以及可能因为并发访问引用的问题有了解,但是根据我的经验来看,即使是以后进入公司,也不可能让一个新来来进行这方面的处理,特别是大型的公司,小公司的机率相对大一点,但是涉及到HIBERNATE的性能操作时,让一个新人来做的机会相对较少,但无论如果一定要具备这样的能力,实践的机会不足,要如何才能更快的提高这方面的实际能力呢?虽然困难重重,但只有寻求解决方法之道才是出路!才能胜人一筹!