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