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

【转】Interceptor 中onFlushDirty()函数执行多次的问题(Hibernate 的一个小Bug)

 
阅读更多

最近在项目中遇到一个奇怪的问题,在使用Hibernate拦截器捕获实体变化并进行处理时,发现其中的onFlushDirty()函数执行了很多次,导致进行处理时产生很多重复数据。具体问题如下:
使用一个类继承Hibernate的HistoryInterceptor类来对程序中的实体变化进行拦截,并在其中的onFlushDirty()函数中对捕获的数据进行处理,产生对应的event数据并保存到数据库中。 例如:
public class EventInterceptor extends EmptyInterceptor {
public boolean onFlushDirty(
        Object entity,
        Serializable id,
        Object[] currentState,
        Object[] previousState,
        String[] propertyNames,
        Type[] types ) throws CallbackException {

        if(isAuditable(entity)){//如果该实体需要被记录,生成对应的event。
            //此处生成对应的event。
        }
        return false;
    }

在程序执行后,发现对应一条实体的变化生成了多条重复的event记录,非常不解。
后来google发现,有人也碰到过对应的问题,并在Hibernage论坛中提出过这个问题,鉴定为Hibernate的一个小Bug。
(原文地址:http://forum.hibernate.org/viewtopic.php?t=940410&highlight=interceptor+onflushdirty)
解决方法如下:
将FlushMode改为:FlushMode.COMMIT
或者也可以提前进行flush()
都可以解决这个问题。

分享到:
评论

相关推荐

    HibernateInterceptor.java

    Hibernate4,Interceptor,spring,quartz

    struts2 interceptor介绍

    在Struts2中,Action、Interceptor、PreResultListener和Result构成了一个紧密协作的体系。每个组件在执行流中扮演着特定角色,确保了业务逻辑的正确执行和响应的适当渲染。`PreResultListener`的引入进一步细化了...

    struts+hibernate一对多的管理系统

    在这个“Struts+Hibernate一对多的管理系统”项目中,我们将深入理解这两个框架如何协同工作,构建出一个具备一对多关系的数据管理应用。在Java Web开发中,一对多关系非常常见,比如在一个用户可以拥有多个订单的...

    Hibernate源码

    EhCache是Hibernate的一个二级缓存插件,用于存储和检索数据,以提高性能。它在SessionFactory级别提供缓存服务,缓存对象可以是实体或查询结果。通过配置,开发人员可以选择启用或禁用特定区域的缓存,并设置缓存...

    hibernate动态分表

    【hibernate动态分表】是一种数据库设计策略,主要用于处理大数据量的问题,通过将数据分散到多个物理表中,以实现水平扩展,提高查询效率,减轻单表的压力。在Java Web开发中,Hibernate作为一款流行的ORM(对象...

    struts2整合hibernate的网上银行模拟项目

    总之,"struts2整合hibernate的网上银行模拟项目"是一个实践性的学习项目,通过它,开发者可以了解如何在实际场景中应用Struts2和Hibernate,以及如何构建一个简单的网上银行系统。这个项目不仅涵盖了基础的MVC架构...

    struts2+hibernate小项目

    在这个"struts2+hibernate小项目"中,MyHibernateEx5可能是一个演示性的应用,展示了如何将这两者结合使用。可能的实现包括:使用Struts2的Action类处理用户请求,调用Hibernate的Session来查询或修改数据库,然后...

    Hibernate3.2官方中文参考手册.pdf+Hibernate.pdf(Hibernate的学习资料)

    Hibernate3.2是其发展中的一个重要版本,提供了许多改进和新特性。 在《Hibernate3.2官方中文参考手册》中,我们可以深入学习到以下关键知识点: 1. **对象关系映射(ORM)基础**:ORM的核心思想是将数据库中的...

    struts2 Interceptor拦截器

    在Struts2框架中,**Interceptor(拦截器)**是一个关键组件,它允许开发者在特定的动作(Action)执行前后添加自定义的处理逻辑,极大地增强了应用程序的灵活性。 #### 二、Interceptor 概念与作用 Interceptor ...

    关于struts2+hibernate的小项目

    Struts2是一个MVC(Model-View-Controller)框架,主要负责处理用户请求、控制业务流程,而Hibernate则是一个对象关系映射(ORM)工具,用于简化数据库操作,将Java对象与数据库表进行关联。 **Struts2框架** ...

    struts2+spring+hibernate整合小案例

    这个"struts2+spring+hibernate整合小案例"是一个用于教学和实践的DEMO,旨在帮助开发者理解和掌握这三大框架的协同工作方式。 首先,Struts2作为MVC(模型-视图-控制器)架构的一部分,主要负责处理HTTP请求,提供...

    Interceptor框架的实现

    1. **定义拦截器接口**:通常,我们会定义一个Interceptor接口,其中包含拦截器需要执行的方法,如`preHandle()`(方法调用前处理)、`postHandle()`(方法调用后处理)和`afterCompletion()`(整个请求完成后处理)...

    postman interceptor

    4. **查看和编辑请求**:在Postman中,你可以看到Interceptor捕获的请求列表,选择一个请求,然后在Postman中对其进行查看、编辑或发送。 三、Interceptor在API工作流中的作用 1. **测试环境切换**:Interceptor在...

    Hibernate 3.2.0 中文官方文档

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者在数据库上操作对象,而无需编写大量的SQL代码。Hibernate 3.2.0 是该框架的一个版本,提供了许多改进和新特性,使得开发更加高效和灵活。中文官方...

    简单的实现Web登录(struts2+Hibernate)

    在这个"简单的实现Web登录(struts2+Hibernate)"项目中,我们将看到如何结合这两种框架来构建一个基础的用户登录系统。首先,我们需要了解Struts2的核心概念,如Action、Result和Interceptor。Action是处理用户请求的...

    Hibernate与struts2结合使用的demo

    Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作,而Struts2则是一个基于MVC(Model-View-Controller)设计模式的行动驱动框架,用于构建结构清晰、可维护性强的Web应用。将这两者结合使用,可以构建出...

    接口测试插件 Postman Interceptor 1.1.1

    Postman Interceptor是一个配套的Chrome和Edge浏览器扩展,它可以与Postman应用程序同步,实时捕获和发送浏览器中的网络请求。这个插件极大地增强了Postman的功能,允许开发者在浏览网页时查看并保存HTTP请求,这...

    postman+postman interceptor

    总的来说,Postman和Postman Interceptor的组合为API开发者提供了一个强大的工具链,无论是在日常开发还是在持续集成过程中,都能显著提升效率和质量。理解并熟练使用这两者,将对提升API开发和测试能力大有裨益。

    Postman-Interceptor-V1.1.2.zip

    在Postman的生态系统中,Interceptor是一个重要的组件,它扩展了Postman的功能,使其能够实时捕获和修改浏览器发送的网络请求。这个"Postman-Interceptor-V1.1.2.zip"文件就是Interceptor的安装包,版本为1.1.2,...

    struts+hibernate整合jar包

    Struts主要负责MVC(Model-View-Controller)架构的实现,提供控制层的功能,而Hibernate则是一个强大的对象关系映射(ORM)工具,用于简化数据库操作。将两者整合可以创建出高效、灵活的Web应用程序。 **Struts 2...

Global site tag (gtag.js) - Google Analytics