问题描述
||
我正在将对对象所做的所有更改记录在数据库中。
@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()
方法。
希望这很清楚。