I have the following Hibernate Interceptor:
@Component
@RequiredArgsConstructor
public class CustomInterceptor extends EmptyInterceptor {
private static final long serialVersionUID = 7228720290710296593L;
@Override
public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
// do some things
return super.onSave(entity, id, state, propertyNames, types);
}
@Override
public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
// do some things
return super.onFlushDirty(entity, id, currentState, previousState, propertyNames, types);
}
}
I'm trying to upgrade by implementing Interceptor instead of extending EmptyInterceptor, since it is deprecated. My new interceptor is the following:
@Component
@RequiredArgsConstructor
public class CustomInterceptor implements Interceptor, Serializable {
private static final long serialVersionUID = 7228720290710296593L;
@Override
public boolean onSave(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types) {
// do some things
}
@Override
public boolean onFlushDirty(Object entity, Object id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
// do some things
}
}
Basically, both interceptors do exactly the same operations. However, the first one works, while the second one doesn't. By work, I mean onSave and onFlushDirty get called when it is expected, while in the second example they simply won't be invoked. So, it should not have anything to do with the operations involved within them. Since EmptyInterceptor really does nothing, I don't know what is wrong with the implementation.
UPDATE 1
I've just found out that instead of entering my overriden methods, it is simply using Interceptor default onSave and onFlushDirty. How is that possible?
UPDATE 2
If I override deprecated methods onSave and onFlushDirty instead of the valid ones it works.
Found the solution. It seemed that the project was using more than one interceptor. For that purpose, a custom interceptor was handling the calls to this
CustomInterceptor. This handler was extendingEmptyInterceptor, which made it to call deprecated methods instead of the valid ones. Simply implementingInterceptorin this handler made it work.