第十章J2EEHibernate高级特性乐观锁.docx
《第十章J2EEHibernate高级特性乐观锁.docx》由会员分享,可在线阅读,更多相关《第十章J2EEHibernate高级特性乐观锁.docx(7页珍藏版)》请在冰豆网上搜索。
第十章J2EEHibernate高级特性乐观锁
Hibernate高级特性
1.Hibernate事务管理
2.悲观锁和乐观锁
3.Hibernate回调机制
4.Hibernate拦截器
1.事务管理
Hibernate只是将事务的管理和调度工作委托给底层的JDBC或者JTA
默认情况默认使用的是JDBC事务,
只能对单一数据库操作
Transactionts=session.beginTransaction();
mit();
ts.rollback();
Hibernate把事务委托给JTA管理,可以跨多个jdbc连接
配置hibernate配置文件P292
二悲观锁和乐观锁
◆认为在每次数据操作时,其他客户端程序也会操作同样的数据
◆对操作的数据进行锁定,直到自己操作完成后解除锁
◆悲观锁的实现,依赖于数据库本身的锁机制
读取数据时候将其锁定,然后在修改:
select*fromCUSTOMERwhereC_ID=1forupdate
弊端:
(如果当前操作人忘记提交了)其他操作不能对当前操作的数据进行访问,对大量用户访问系统是回造成性能问题
典型悲观锁案例:
select*fromcustomerwherec_id=1forupdate
不提交,打开另外一个sql窗口,执行下面修改语句:
updatecustomersetc_name='lll'wherec_id=1
只有当上面的查询commit了才会执行
悲观锁案例:
在读取之前锁定
乐观锁:
◆更为宽松的加锁机制
◆不在数据库层次上进行锁定
◆乐观锁应用程序通过实现数据版本号进行控制
1.在数据库表增加verson字段
altertablecustomer
add(versonnumber(7,2));
2.实体类中增加属性
3.映射文件中在id之后配置verson
案例:
往数据库修改信息,verson更新了每次加一
案例二:
当两个人同时读取数据修改,第一个人修改完提交后,版本改完1,那么第二个人提交版本与他之前读取的版本不同了,提交发送错误
三:
hibernate中的回调
处理hibernate中增删改查过程的自然回调(类似于web中的session监听)
1.实现LifeCycle接口
首先执行onLoad方法
有没有办法不需要实体类来实现接口,解决侵入性的代码。
Hibernate中引入拦截器的概念,session的持久化都首先需要经过拦截器,在session创建时就指定加载相应的拦截器
1.建一个类实现Interceptor拦截器
2.实现监听方法
测试