我有以下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);
  }

}

我正在try 通过实现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
  }

}

基本上,这两个拦截器执行完全相同的操作.然而,第一个可以工作,而第二个不行.我的意思是,onSaveonFlushDirty会在预期的时间被调用,而在第二个例子中,它们根本不会被调用.所以,它应该与他们所涉及的操作没有任何关系.既然EmptyInterceptor真的什么都不做,我不知道实现出了什么问题.

UPDATE 1

我刚刚发现,它并没有输入我被覆盖的方法,而是简单地使用了Interceptor个默认的onSaveonFlushDirty.那件事怎么可能?

UPDATE 2

如果我覆盖了过时的方法onSaveonFlushDirty,而不是有效的方法,它就能工作.

推荐答案

找到解决办法了.看起来这个项目使用了不止一个拦截器.为此,一个自定义的拦截器正在处理对这个CustomInterceptor的调用.这个处理程序扩展了EmptyInterceptor,这使得它调用了过时的方法,而不是有效的方法.在这个处理程序中简单地实现Interceptor就可以让它工作.

Java相关问答推荐

当切换javaFX场景时,stage的大小正在Minimize

转换为Biggram

了解Android Studio中的调试器输出

为什么一个java函数会返回一个作为参数传递给它的对象?

如何在访问完所有文件后加入所有线程?

Java 8中的多个字段和计数

JDK22执行repackage of goal org. springframework. boot:spring—boot—maven—plugin:3.2.3:repackage failed:unsupported class file major version 66—>

Spark上下文在向Spark提交数据集时具有内容,但Spark在实际构建它时发现它为空

我不能再在Android Studio Hedgehog上用Java语言创建新项目了吗?

在Java 17中使用两个十进制数字分析时间时出错,但在Java 8中成功

在JDK 1.8源代码中,为什么使用A-B 0来确定哪个更大,而不是A B?

在Ubuntu 23.10上使用mp3创建JavaFX MediaPlayer时出错

Android无法在Java代码中调用Kotlin代码,原因是在Companion中使用Kotlin枚举时

在WHILE()循环初始化部分中声明和初始化变量的Java语法?

Intellij 2023 IDE:始终在顶部显示菜单栏

如何使用外部函数从Java中获取C++ struct 的返回值&;内存API

Maven创建带有特定类的Spring Boot jar和普通jar

窗口启动后不久,从java.awt.Graphics disapear创建的矩形

具有 DayOfWeek 列表的 JPA 实体

ChromeDriver 版本 117+ 强制另存为对话框 - 如何绕过? (selenium/Java)