【问题标题】:How to find which fields has been changed during @EntityListeners call如何在@EntityListeners 调用期间查找哪些字段已更改
【发布时间】:2016-05-04 11:49:49
【问题描述】:

假设我有这个课程:

@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 实例字段更改时被调用。

有没有可能发现这个方法因为特定的字段变化而被调用了?

例如: 如果我单独更改 name 字段,我应该能够发现 name 字段在最后一次持久化中已更改。

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

如果可以的话,我想知道改变方法。

谢谢

【问题讨论】:

标签: java hibernate jpa entitylisteners


【解决方案1】:

您所描述的仅对更新事件有意义。你可以注册一个interceptor 并监听被覆盖的onFlushDirty 方法的变化:

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

这里有先前和当前状态的数组以及属性数组,因此您可以轻松找出发生了什么变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2015-01-11
    • 2011-08-24
    • 1970-01-01
    • 2018-10-26
    相关资源
    最近更新 更多