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 閱讀(2490) 評論(1)  編輯  收藏 所屬分類: HibernateEJB

          評論

          # re: Interceptor 中onFlushDirty()函數執行多次的問題(Hibernate 的一個小Bug) 2008-05-09 19:34 優書齋
          優書齋提供大量計算機書籍下載
          同時歡迎有時間的英語還不錯的朋友加入我們的翻譯團隊
          http://ushuzhai.cn  回復  更多評論
            

          主站蜘蛛池模板: 乌兰察布市| 常熟市| 思茅市| 黎平县| 双柏县| 江西省| 城固县| 太谷县| 新邵县| 双江| 曲阳县| 神农架林区| 巧家县| 连山| 辽中县| 定陶县| 甘洛县| 绿春县| 天祝| 永川市| 新邵县| 霍山县| 固安县| 罗平县| 称多县| 郴州市| 东港市| 永兴县| 安平县| 文昌市| 成安县| 海口市| 历史| 桂阳县| 土默特左旗| 云浮市| 博客| 句容市| 若尔盖县| 宁国市| 武宁县|