Hibernate拦截器与监听器

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

拦截器与事件都是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代码

package com.cos.listener;     
    
import org.hibernate.HibernateException;     
import org.hibernate.event.SaveOrUpdateEvent;     
import org.hibernate.event.SaveOrUpdateEventListener;     
    
public class SaveListener implements SaveOrUpdateEventListener {     
    
    @Override    
    public void onSaveOrUpdate(SaveOrUpdateEvent event)     
            throws HibernateException {     
        if(event.getObject() instanceof com.cos.entity.User){     
            System.out.println("保存User之前的操作");     
        }     
    }     

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

 

Hibernate配置文件:

Xml代码


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

 

 

 

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

【编辑推荐】

  1. Hibernate批量更新与删除实例浅析
  2. 简述Hibernate Synchronizer学习笔记
  3. Hibernate column属性简介
  4. 概括Hibernate查询语言
  5. Hibernate cartridge学习总结
责任编辑:金贺 来源: ITEYE博客
相关推荐

2012-02-03 13:27:16

2009-09-27 17:46:22

Hibernate监听

2009-09-27 17:37:32

Hibernate拦截

2009-01-03 13:37:26

Oracle监听器Oracle服务器Oracle网络配置

2009-07-08 17:39:23

Servlet监听器

2011-03-21 16:21:49

Oracle监听口令监听器

2009-06-24 16:00:00

2020-04-20 11:09:49

过滤器监听器 Web

2025-02-28 08:14:53

2023-09-05 08:58:07

2023-11-01 07:55:03

事件监听器传递数据

2009-07-06 13:48:53

Servlet监听器

2011-06-01 14:55:24

Android Service 监听器

2010-01-13 09:49:09

注释监听器Listener

2010-04-23 18:00:31

2009-07-08 17:02:11

JDK实现调用拦截器

2011-11-21 14:21:26

SpringMVCJava框架

2009-11-09 10:03:09

WCF通道监听器

2010-02-22 15:06:31

WCF信道监听器

2023-01-06 08:55:00

点赞
收藏

51CTO技术栈公众号