Hibernate EmptyInterceptor 可以工作,但 Interceptor 不行

问题描述 投票:0回答:1

我有以下 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
而不是有效的方法,它就可以工作。

java spring-boot hibernate interceptor
1个回答
0
投票

找到解决方案。该项目似乎使用了不止一个拦截器。为此,自定义拦截器正在处理对此

CustomInterceptor
的调用。该处理程序扩展了
EmptyInterceptor
,这使得它可以调用已弃用的方法而不是有效的方法。只需在此处理程序中实现
Interceptor
即可使其工作。

© www.soinside.com 2019 - 2024. All rights reserved.