如何查找 @EntityListeners 调用期间哪些字段已更改

Abd*_* AK 5 java hibernate jpa 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; 
  }
}
Run Code Online (Sandbox Code Playgroud)

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

例如: 如果我单独更改名称字段,我应该能够发现名称字段在上次持久化中已更改。

一种通过与审计进行比较来检查的方法。

我想知道是否有其他方法。

谢谢

Dra*_*vic 4

您所描述的内容仅对更新事件有意义。您可以注册一个拦截器并监听被重写方法的变化onFlushDirty

onFlushDirty(Object entity,
             Serializable id,
             Object[] currentState,
             Object[] previousState,
             String[] propertyNames,
             Type[] types)
Run Code Online (Sandbox Code Playgroud)

这里有先前和当前状态的数组以及属性数组,因此您可以轻松找出更改的内容。