




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate ORM 最佳实践 第8章 Hibernate的拦截器和 事件框架,2,回顾,学会使用和管理Hibernate的二级缓存 学会使用和管理Hibernate的查询缓存 使用Hibernate的统计机制监视二级缓存的使用情况,3,目标,了解和使用Hibernate拦截器 了解和使用Hibernate事件框架,4,Interceptor,在应用程序持久化操作之前或之后进行自定义操作(被拦截),其目的监控或者影响持久化对象操作. 注意: 不同持久化方法对应不同的事件监听器 当某事件发生时,先调用拦截器进行反应,再调用该事件监听器,最后进行持久化对象操作.,Session,Interceptor,save(),load(),delete(),flush(),其它持久化方法,数据库,实现Interceptor接口,继承EmptyInterceptor,5,Interceptor接口,从上图中可以看出:针对Session接口中每一个对象持久化方法,Interceptor中都 定义相应方法,可以 编写自定义的拦截器. 可以为SessionFactory提供一个Interceptor实例,也可以为每一个Session创建一 个Interceptor实例. 实现拦截器:直接实现接口Interceptor或继承EmptyInterceptor 启用拦截器,使用编码方式,把自定义的拦截器绑定到一个session或sessionFactory对象上,Session session=getSessionFactory().openSession(new 拦截器类); 或 Configuration cfg=new Configuration().configure().setInterceptor(new 拦截器类); SessionFactory sessionFactory=cfg.buildSessionFactory();,6,Interceptor接口方法,7,Interceptor接口方法,boolean onLoad(Object entity,Serializable id,Object state,String propertyNames,Type types),修改state,可以修改持久化类对象属性値,返回true,在方法中修改对象属性值,boolean onSave(Object entity,Serializable id,Object state,String propertyNames,Type types),修改state,可以修改持久化类对象属性値,返回true,在方法中修改对象属性值,当对象在flush时被发现是脏数据,调用以下函数,boolean onFlushDirty(Object entity,Serializable id,Object currentState,Object preState, String propertyNames,Type types),当前属性值,修改前的属性值,返回true,在方法中修改currentState值,8,示例-1,编写一个拦截器,可以监控持久化对象读与写操作,如果 写入一个学生对象发现学生姓名为null,要用”学生”串来 替换空名.,9,代码,10,示例-2,学生与班级,设计拦截器监控删除持久对象的 操作情况,11,代码,12,Interceptor接口方法,2.与事务事件相关方法,void afterTransactionBegiin(Transaction tx),Transaction.begin(),Tmit(),Transaction.rollback(),void afterTransactionCompletion(Transaction tx),void beforeTransactionCompletion(Transaction tx),13,Interceptor接口方法,3.与操作集合对象事件相关方法,当某个对象的属性为集合时,保存该对象,其集合属性也同时保存,自动调用下面的方法,集合被删除时调用,void onCollectionUpdate(Object collection,Serializable key),集合被更新时调用,14,示例,15,代码,16,Interceptor接口方法,4.其它与实体信息相关方法,Boolean isTransient(Object entity),判断是否持久化或游离态,Object getEntity(String entityname,Serializable id) 获取实体对象 String getEntityName(Object object) 获取实体名 Object instantiate(String entityName,EntityMode entityMode,Serializable id) 实例化实体类,17,Hibernate事件框架,几乎每一个对象持久化方法,Hibernate都定义一个事件监听器接口,并且提供一个默认的实现类具体负责处理持久化事件. org.hibernate.event包中定义各种事件及监听器接口;org.hibernate.event.def包中定义监听器默认实现. 实现自定义监听器,实现监听器接口,继承默认的监听器,事件名+EventListener,on事件名(事件名Event event),监听器,事件处理方法,Default+事件名+EventListener,默认的监听器类,18,注册监听器,两种注册方式:,在hibernate.cfg.xml中配置, ,19,注册监听器,通过编程方式注册监听器,利用configuration类的方法setListener(事件名,监听器)或 setListeners(事件名,监听器数组),注意:常用的事件名有 load pre-load post-load save update pre-update post-update dalete pre-delete post-delete pre-insert post-insert,20,示例,编写一个监听器,可以监控持久化对象读与写操作,如果 写入一个学生对象发现学生姓名为null,要用”学生”串
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 无线火灾探测器项目可行性研究报告
- 贵阳市旅游公路加宽项目可行性研究报告
- 防汛知识培训新闻课件
- 防汛抢险队伍培训知识课件
- DB34-T 5037-2022 船闸工程施工安全检查标准
- 国际贸易合同法律条款示例
- 商品质量保证合同的法律条款解析
- 住房租赁的合同详细版样书3篇
- 石棉安全标准修订-洞察及研究
- 横突融合技术优化-洞察及研究
- 学生心理健康一人一档、一人一案表
- 《急性亚硝酸盐中毒》课件
- 2024年度企业员工信息安全培训内容
- 我国的宗教政策课件
- 《标准施工招标文件》(2007年版)
- 1、山东省专业技术职称评审表(A3正反面手填)
- 高级微观经济学
- led显示屏售后服务承诺书
- 兽医药理学各论(抗微生物药物)课件(同名386)
- 作文-曼娜回忆录全文小说
- 广东省建筑工程绿色施工评价标准
评论
0/150
提交评论