2011-09-15 109 views
0

下面我有以下配置:我Hibernate的攔截器不工作

<bean id="myHibernateInterceptor" class="com.foo.interceptor.MyHibernateInterceptor" /> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="configLocation"> 
      <value>classpath:hibernate.cfg.xml</value> 
     </property> 
     <property name="entityInterceptor" ref="myHibernateInterceptor"/> 
</bean> 

但我的休眠攔截從不開火。任何線索?

這裏是攔截代碼:

public class MyHibernateInterceptor extends EmptyInterceptor { 

    @Override 
    public boolean onFlushDirty(final Object entity, final Serializable id, 
          final Object[] currentState, final Object[] previousState, 
          final String[] propertyNames, final Type[] types) { 
    setValue(currentState, propertyNames, "createdOn", new Date()); 

      return true; 
    } 
} 
+1

看起來一見鍾情。你的攔截器怎麼樣 - 你擴展EmptyInterceptor嗎?如果是的話,你會覆蓋哪些方法?也許你可以展示更多的代碼。 – jeha

回答

2

我發現這個問題,同時面臨着同樣的問題。我的onSave()發射很好,但我的onFlushDirty()不是。我發現在saveOrUpdate()後需要addng一個flush()調用。回頭看,這似乎很明顯,但它不是那個時候。

希望這會有所幫助。

0

你有沒有把intercepetor上的會話,你也可以使用sessionbuilder上攔截:

SessionFactory sessionFactory = getSessionFactory(); SessionBuilder sessionBuilder = sessionFactory.withOptions(); Session session = sessionBuilder.interceptor(interceptor).openSession(); interceptor.setSessionBuilder(sessionBuilder); 

你的攔截器必須擴展的類組織冬眠EmptyInterceptor

將根據您的業務內容你實現這些方法onsave onupdate ondelete後衝等