`
wangyanlong0107
  • 浏览: 502747 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Hibernate拦截器

 
阅读更多

项目中每个表里都有相同的四个字段,创建时间,创建人,更新时间,更新人,这时我们可以通过拦截器在保存,更新之前设置他们的值

实现方法: 
首先写一个类继承org.hibernate.EmptyInterceptor或者实现org.hibernate.Interceptor接口: 
为了简单起见,一般直接继承org.hibernate.EmptyInterceptor就可以了。 
然后重载一下onFlushDirty方法和onSave方法就可以了。 

因为Hibernate会在更新数据时回调onFlushDirty方法插入数据时回调onSave方法。 

public class HibernateInterceptor extends EmptyInterceptor { //只要继承这个类就OK了

@Override
public boolean onSave(Object entity, Serializable id, Object[] state,
    String[] propertyNames, Type[] types) {//这个保存到数据库之前,会执行的代码,entity是要保存的实体类
   try {
    PropertyUtils.setProperty(entity, "createTime", new Date());
    if (ServletActionContext.getRequest() != null) {
     PropertyUtils.setProperty(entity, "createUserID",
       ServletActionContext.getRequest().getSession()
         .getAttribute(Constants.LOGIN_USER_ID));
    }
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return super.onSave(entity, id, state, propertyNames, types);
}

@Override
public boolean onFlushDirty(Object entity, Serializable id,
    Object[] currentState, Object[] previousState,//这个更新到数据库之前,会执行的代码,entity是要更新的实体
    String[] propertyNames, Type[] types) {
   try {
    PropertyUtils.setProperty(entity, "updateTime", new Date());
    if (ServletActionContext.getRequest() != null) {
     PropertyUtils.setProperty(entity, "updateUserID",
       ServletActionContext.getRequest().getSession()
         .getAttribute(Constants.LOGIN_USER_ID));
    }
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return super.onFlushDirty(entity, id, currentState, previousState,
     propertyNames, types);
}

 

怎么让它起作用呢,在spring里配置文件加上下面的

<bean id="hibernateInterceptor"
   class="com.jsict.framework.interceptor.HibernateInterceptor" /> 
  
<bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref bean="dataSource" />
   </property>
   <property name="entityInterceptor"> //在sessionFactory里配置上这个就可以了,拦截器就起作用了
    <ref local="hibernateInterceptor" />
   </property>

分享到:
评论

相关推荐

    Hibernate事件框架之拦截器使用源代码

    ### Hibernate 拦截器使用详解 在 Java 开发领域,Hibernate 是一款非常流行的 ORM(对象关系映射)框架,它极大地简化了基于 JDBC 的数据库访问。为了更好地控制持久化行为,Hibernate 提供了一个强大的事件处理...

    hibernate显示不带?的完整sql

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作。在开发过程中,为了调试和优化SQL查询,有时我们需要查看Hibernate生成的完整SQL语句,包括其参数...

    SpringMVCHibernate实例【含登录拦截器例子】

    通过这个实例,你可以学习如何整合 Spring MVC 和 Hibernate,实现用户登录验证,以及如何设计和配置拦截器来增强应用的安全性。此外,你还能了解到如何组织一个标准的 Java Web 项目结构。这些知识对于理解企业级 ...

    hibernate 2 升级参考文档

    在进行以上步骤的同时,还需要注意检查任何自定义的Hibernate拦截器、事件监听器或者其他扩展是否兼容Hibernate 3。另外,确保所有使用的API和方法在新版本中仍然可用,因为某些API在不同版本之间可能会被废弃或修改...

    hibernate框架基本包

    - **Hibernate拦截器**: 类似于监听器,但更灵活,可以直接修改对象的状态。 总结来说,“hibernate框架基本包”包含的资源旨在帮助开发者理解Hibernate的核心概念、操作和配置,以及如何在实际项目中有效利用它。...

    hibernate 3.5.5 常用jar包

    15. **Hibernate拦截器**:提供了更细粒度的控制,可以在对象的持久化操作前后进行干预。 16. **实体关系映射策略**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)...

    Hibernate的demo

    1. **Hibernate拦截器** Hibernate提供了一种机制,即拦截器(Interceptor),可以在特定的生命周期事件(如加载、保存、更新、删除等)前后执行自定义逻辑。拦截器可以用来实现诸如日志记录、权限验证等额外功能。...

    hibernate+struts2全套架包

    - 拦截器配置:在Struts2中添加Hibernate拦截器,以处理Session的生命周期,例如,开启事务、提交或回滚等。 - 实现业务逻辑:在Action类中注入SessionFactory,通过Session执行数据库操作,使用Query接口执行查询...

    Hibernate与Struts 2整合,学生选课系统源代码

    整合过程包括在Struts 2配置文件中添加Hibernate拦截器,配置数据源,以及在Action类中注入Hibernate的SessionFactory和服务层组件。 4. **数据库设计**:实验中涉及到的数据库表包括学生表、专业表、课程表、登录...

    拦截器和控制器的区别

    拦截器和过滤器的区别 1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求...

    Struts1 拦截器(SAIF)的使用

    Struts1 框架是Java Web开发中的一个经典MVC框架,它的核心组件之一就是拦截器(Interceptor)。拦截器在Struts1中扮演着重要角色,它允许开发者在动作执行前后插入自定义的逻辑,比如日志记录、权限验证、事务管理...

    hibernate_persistence第02-16章书中源码

    Hibernate拦截器允许我们在实体的生命周期事件中插入自定义行为,如在保存、更新或删除实体前/后执行某些操作。这在日志记录、权限控制等场景非常有用。 5. **hibernate_09_006_Procedure**: 在这一章,可能会...

    spring hibernate实现动态替换表名(分表)的方法

    首先,我们需要新建一个 Hibernate 拦截器类,用于拦截所有数据库操作,并替换掉其中的表名。 ```java public class AutoTableNameInterceptor extends EmptyInterceptor { private String srcName = StringUtils....

    Spring3+Dwr+JdbcTemplate(拦截器方式实现防止重复提交)

    1.针对SpringMVC注解的配置,可起到入门的作用 2.Spring+JdbcTemplate事物管理 3.Spring+Hibernate事物管理 ...5.Spring配置拦截器 6.Spring通过拦截器实现防止重复提交实例 对学习,会起到非常好的效果

    登录拦截器

    在Spring、Struts2和Hibernate这三大框架的组合应用中,登录拦截器的作用尤为显著,它能确保只有经过身份验证的用户才能访问受保护的页面或执行特定的业务操作。 首先,让我们来理解一下这三个框架的角色: 1. **...

    给hibernate配置文件加密解密的方案

    Hibernate 配置文件加密解密方案 在本文中,我们将讨论如何在 Hibernate 配置文件中对数据库密码进行加密和解密,以保护数据的安全。该方案通过使用 Java 的 Cipher 类和 DES 对称加密算法来实现加密和解密操作。 ...

    ssh+aop+log4j+日志拦截器+注解

    标题中的"ssh+aop+log4j+日志拦截器+注解"涉及到的是Java Web开发中的几个核心组件和技术,这些技术在构建大型、分布式的企业级应用时常常被使用。下面将详细介绍这些知识点: 1. SSH (Spring, Struts, Hibernate)...

    ssh最新框架搭建,加入拦截器

    在这个"ssh最新框架搭建,加入拦截器"的主题中,我们将深入探讨SSH框架的搭建过程以及如何添加拦截器来增强功能。 首先,让我们从Spring框架开始。Spring是核心,它提供依赖注入(DI)和面向切面编程(AOP)的功能,...

    登陆拦截器

    2. **配置拦截器**:在Struts2的配置文件(如struts.xml)中,你需要声明你的拦截器,并将它添加到拦截器栈中。例如: ```xml &lt;result name="success"&gt;/welcome.jsp &lt;result name="error"&gt;/login.jsp...

    2012最新ssh2框架-struts2.3+hibernate4.1+spring3.1登录+注册+拦截器+分页

    2012最新ssh2框架-struts2.3+hibernate4.1+spring3.1登录+注册(md5加密)带拦截器,mysql数据库,带分页功能, 只需修改com/resource/resourses.properties数据库连接即可使用

Global site tag (gtag.js) - Google Analytics