我在下面有以下配置:
<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;
}
}
答案 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等