>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23246 个阅读者 刷新本主题
 * 贴子主题:  Hibernate拦截器与监听器 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-02-21 11:26:34     消息  查看  搜索  好友  邮件  复制  引用

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

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之前的操作");    
        }    
    }    
}

Hibernate配置文件

    "-//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.MySQLDialect< span>property>    
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver< span>property>    
        <property name="hibernate.connection.url">jdbc:mysql:///test< span>property>    
        <property name="hibernate.connection.username">< span>property>    
        <property name="hibernate.connection.password">< span>property>    
        <property name="hibernate.show_sql">true< span>property>    
        <property name="hibernate.hbm2ddl.auto">create< span>property>    
        <mapping resource="com/cos/entity/User.hbm.xml"/>    
        <event type="save">    
            <listener class="com.cos.listener.SaveListener"/>    
            <listener class="org.hibernate.event.def.DefaultSaveOrUpdateEventListener"/>    
        < span>event>    
    < span>session-factory>    
< span>hibernate-configuration>    

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

转自:https://cloud.tencent.com/info/8fab739f457984dcceb677bfd3dbf733.html


程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-23 10:48:10 重新编辑]
  Java面向对象编程-->对象的生命周期
  JavaWeb开发-->使用过滤器
  JSP与Hibernate开发-->JPA API的高级用法
  Java网络编程-->基于UDP的数据报和套接字
  精通Spring-->组合(Composition)API
  Vue3开发-->Vue CLI脚手架工具
  几种常见的MAVEN仓库地址
  Spring事务的声明和管理
  Spring 5 webflux响应式编程 - 但时间也偷换概念
  谈谈响应式编程
  Spring MVC文件上传与下载
  Spring MVC实现国际化的几种方式
  Spring MVC控制器类的方法的所支持的方法参数类型
  Spring MVC中Controller的用法
  Spring Cloud构建微服务架构的服务注册与发现
  从零搭建一个基于 ELK 的日志、指标收集与监控系统
  Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba
  理解 RESTful 风格的 API
  Gradle入门
  一份Spring Boot核心知识清单
  Spring Boot整合WebSocket及Spring Security实例
  更多...
 IPIP: 已设置保密
楼主      
该用户目前不在线 nihaota 
  
威望: 0
级别: 新手上路
魅力: 1315
经验: 1315
现金: 2944
发文章数: 243
注册时间: 0001-01-01
 消息  查看  搜索  好友  邮件  复制  引用


讨债公司
发文章时间 2022-10-28 20:00:39
 IPIP: 已设置保密 1 楼     
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。