Sealyu

--- 博客已迁移至: http://www.sealyu.com/blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  618 随笔 :: 87 文章 :: 225 评论 :: 0 Trackbacks
最近在项目中遇到一个奇怪的问题,在使用Hibernate拦截器捕获实体变化并进行处理时,发现其中的onFlushDirty()函数执行了很多次,导致进行处理时产生很多重复数据。具体问题如下:
使用一个类继承Hibernate的EmptyInterceptor类来对程序中的实体变化进行拦截,并在其中的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()
都可以解决这个问题。

posted on 2008-05-09 15:59 seal 阅读(2470) 评论(1)  编辑  收藏 所属分类: HibernateEJB

评论

# re: Interceptor 中onFlushDirty()函数执行多次的问题(Hibernate 的一个小Bug) 2008-05-09 19:34 优书斋
优书斋提供大量计算机书籍下载
同时欢迎有时间的英语还不错的朋友加入我们的翻译团队
http://ushuzhai.cn  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: