我有以下 Hibernate 拦截器:
@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);
}
}
我正在尝试通过实施
Interceptor
来升级,而不是扩展 EmptyInterceptor
,因为它已被弃用。我的新拦截器如下:
@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
}
}
基本上,两个拦截器执行完全相同的操作。但是,第一个有效,而第二个则无效。通过工作,我的意思是
onSave
和 onFlushDirty
在预期时被调用,而在第二个示例中,它们根本不会被调用。因此,它不应该与其中涉及的操作有任何关系。由于EmptyInterceptor
确实什么也没做,我不知道实施有什么问题。
更新1
我刚刚发现,它不是输入我的重写方法,而是简单地使用
Interceptor
默认 onSave
和 onFlushDirty
。这怎么可能?
更新2
如果我重写已弃用的方法
onSave
和 onFlushDirty
而不是有效的方法,它就可以工作。
找到解决方案。该项目似乎使用了不止一个拦截器。为此,自定义拦截器正在处理对此
CustomInterceptor
的调用。该处理程序扩展了 EmptyInterceptor
,这使得它可以调用已弃用的方法而不是有效的方法。只需在此处理程序中实现 Interceptor
即可使其工作。