J'ai un HibernateInterceptor simple dans lequel fondamentalement je veux placer quelques champs automatiquement. Cet intercepteur (ci-dessous) étend EmptyInterceptor:Hibernate Interceptor ne fonctionne pas
public class EntityAuditInterceptor extends EmptyInterceptor {
/**
* The Serial Version UUID.
*/
private static final long serialVersionUID = 4636626262147801287L;
/* (non-Javadoc)
* @see org.hibernate.EmptyInterceptor#onFlushDirty(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.Object[], java.lang.String[], org.hibernate.type.Type[])
*/
public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
// doing stuff here
return false;
}
/* (non-Javadoc)
* @see org.hibernate.EmptyInterceptor#onSave(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.String[], org.hibernate.type.Type[])
*/
public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
// doing stuff here
return false;
}
}
Je câblage à l'aide d'un fichier de configuration de ressort comme suit:
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="hsqlDbDataSource"/>
<property name="packagesToScan">
<list>
<value>com.dreamteam.lms.**.*</value>
</list>
</property>
<!-- Adding Interceptor here -->
<property name="entityInterceptor">
<bean class="com.dreamteam.lms.interceptors.EntityAuditInterceptor"></bean>
</property>
<property name="hibernateProperties">
<props>
<!--<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>-->
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
</props>
</property>
</bean>
Cependant, l'Interceptor est jamais atteint. Est-ce que quelqu'un a la moindre idée? J'ai aussi essayé d'ajouter ce qui suit à la définition de haricot gestionnaire de transactions comme suit:
<property name="entityInterceptor">
<ref local="entityAuditInterceptor"/>
</property>
Salut Gutch ... J'ai commenté parties du code afin que la question ici est plus courte. Mon problème est qu'il n'entrera pas du tout dans l'intercepteur. J'ai placé un point d'arrêt dans l'intercepteur. Pourtant, il n'est jamais exécuté. Je suis vraiment désemparé. – Kros
@gutch pourriez-vous regarder la question très similaire http://stackoverflow.com/questions/27602318/hibernate-myinterceptoronflushdirty-is-never-called pls? –