如何使用实体侦听器和回调方法访问oldObject和newObject

问题描述

|| 我正在将对对象所做的所有更改记录在数据库中。
@PostPersist
public void logPostPersist(Object object) {
    PAudit p = new PAudit();
    p.setChangeType(\"INSERT\");
    p.setObjectState(object.toString());
    p.setUserName(SecurityContextHolder.getContext().getAuthentication().getName());
    try {
        p.persist();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@PostUpdate
public void logUpdate(Object object) {
    PAudit p = new PAudit();
    p.setChangeType(\"UPDATE\");
    p.setObjectState(object.toString());
    p.setUserName(SecurityContextHolder.getContext().getAuthentication().getName());
    p.persist();
}
这将为我提供对象更改后的当前状态。 我还想将对象的先前状态(在更改之前)与当前状态一起添加。 如何同时获得对象的两种状态(更改前和更改后)? 谢谢。     

解决方法

您可以通过创建一个接口来实现此目的,您的域类应提供以前的状态,该接口应实现:
public interface PreviousStateProvider {
  public T getPreviousState();

  public void setPreviousState(T state);
}
域类应具有私有属性,以在加载点时保持状态。 然后,您可以创建一个Hibernate PostLoad侦听器,该侦听器在域对象加载时设置域对象的加载状态。然后,当您更新域对象时,可以使用以下命令访问以前的(已加载)状态:
getPreviousState()
方法。 希望这很清楚。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...