Hibernate拦截器与监听器

拦截器与事件都是Hibernate的扩展机制,Interceptor接口是老的实现机制,现在改成事件监听机制;他们都是Hibernate的回调接口,Hibernate在调用save、delete、update...这些方法的时候会回调这个类。

Hibernate3.0之前拦截器跟java中的过滤器很像的。

Hibernate3.0之后把拦截器改成事件监听了。

saveOrUpdateEventListener接口:

保存和更新数据的时候会被Hibernate监听到。

例子:

if(event.getObject() instanceof com.cos.User){

//如果这个事件是操作User对象的,就执行if里面的代码

}

把监听器告诉Hibernate:

监听器SaveListener.java:

Java代码

 
 
 
  1. package com.cos.listener;     
  2.     
  3. import org.hibernate.HibernateException;     
  4. import org.hibernate.event.SaveOrUpdateEvent;     
  5. import org.hibernate.event.SaveOrUpdateEventListener;     
  6.     
  7. public class SaveListener implements SaveOrUpdateEventListener {     
  8.     
  9.     @Override    
  10.     public void onSaveOrUpdate(SaveOrUpdateEvent event)     
  11.             throws HibernateException {     
  12.         if(event.getObject() instanceof com.cos.entity.User){     
  13.             System.out.println("保存User之前的操作");     
  14.         }     
  15.     }     

 

Hibernate配置文件:

Xml代码

 
 
 
  1.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"     
  2.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    
  3. <hibernate-configuration>    
  4.     <session-factory>    
  5.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect property>    
  6.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver property>    
  7.         <property name="hibernate.connection.url">jdbc:mysql:///test property>    
  8.         <property name="hibernate.connection.username"> property>    
  9.         <property name="hibernate.connection.password"> property>    
  10.         <property name="hibernate.show_sql">true property>    
  11.         <property name="hibernate.hbm2ddl.auto">create property>    
  12.         <mapping resource="com/cos/entity/User.hbm.xml"/>    
  13.         <event type="save">    
  14.             <listener class="com.cos.listener.SaveListener"/>    
  15.             <listener class="org.hibernate.event.def.DefaultSaveOrUpdateEventListener"/>    
  16.          event>    
  17.      session-factory>    
  18. hibernate-configuration>    

 

 

 

可以看到两个监听器,一个是自己的监听器、一个是缺省的监听器。两个监听器哪个在前就先执行哪个监听器。

【编辑推荐】

  1. Hibernate批量更新与删除实例浅析
  2. 简述Hibernate Synchronizer学习笔记
  3. Hibernate column属性简介
  4. 概括Hibernate查询语言
  5. Hibernate cartridge学习总结
THE END