我的Hibernate Interceptor无法正常工作

时间:2011-09-15 22:50:38

标签: java hibernate spring

我在下面有以下配置:

<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>

但是我的hibernate拦截器永远不会被触发。有线索吗?

这是拦截器代码:

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;
    }
}

2 个答案:

答案 0 :(得分:3)

我在面对同样的问题时发现了这个问题。我的onSave()射击正常,但我的onFlushDirty()没有。我发现在需要saveOrUpdate()之后添加了一个flush()调用。回想起来,这似乎很明显,但当时并不是这样。

希望这有帮助。

答案 1 :(得分:0)

你有没有把interpepetor放在会话上,你也可以在拦截器上使用sessionbuilder:

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

你的拦截器必须扩展类org hibernate EmptyInterceptor

根据你的业务实现那些方法onsave onupdate ondelete postflush等

相关问题