2011-09-15 88 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后冲等