有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何查找@EntityListeners调用期间更改的字段

假设我有一门课:

@EntityListeners({MyListener.class})
class MyClass {
  String name;
  String surname;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name; 
  }

  public String getSurname() {
    return name;
  }

  public void setSurname(String name) {
    this.name = name; 
  }
}

MyListener类将如下所示:

public class MyListener {

    private static final Logger log = Logger.getLogger(MyListener.class.getName());

    public MyListener() {

    }

    @PostPersist
    @PostUpdate
    @PostRemove
    public void onPostPersist(MyClass object) {
        log.fine("Firing changed entity event");
    }
}

MyListener类中的onPostPersist()方法将在MyClass实例字段更改时被调用

是否可能发现由于特定字段的更改而调用了此方法

例如: 如果我单独更改了名称字段,我应该能够找到上次更改的名称字段

检查的一种方法是与审计进行比较

我想知道改变方法是否可行

谢谢


共 (1) 个答案

  1. # 1 楼答案

    您所描述的内容仅适用于更新事件。您可以注册一个interceptor并监听被重写的onFlushDirty方法中的更改:

    onFlushDirty(Object entity,
                 Serializable id,
                 Object[] currentState,
                 Object[] previousState,
                 String[] propertyNames,
                 Type[] types)
    

    这里有以前和当前状态的数组,以及属性数组,因此可以很容易地找出发生了什么变化