我想创建一个记录器来记录实体上的任何 CRUD 操作。 插入
或删除
很容易。但是我如何在更新过程中访问以前的实体,以便我可以记录更改的字段(例如通过反射访问)。
@Entity
@EntityListeners(AuditingEntityListener.class)
public class MyEntity {
}
public class AuditEntityListener {
private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
private static final Marker AUDIT = MarkerFactory.getMarker("AUDIT");
@PrePersist
public void prePersist(Object target) {
log("new object inserted", target);
}
@PreRemove
public void preRemove(Object target) {
log("entity deleted", target);
}
@PreUpdate
public void preUpdate(Object target) {
//TODO how can I access the "old" entity, so that I can log only changed fields (eg via reflection)?
}
}
最佳答案
您可以将 previousState 保存在 PostLoad 方法中,并检查 PreUpdate 方法中的差异
// EDIT
@Entity
@EntityListeners(AuditingEntityListener.class)
public class MyEntity {
@Transient
private transient MyEntity savedState;
}
public class AuditEntityListener {
private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
private static final Marker AUDIT = MarkerFactory.getMarker("AUDIT");
@PostLoad
private void saveState(MyEntity target){
target.savedState = SerializationUtils.clone(target);
}
@PrePersist
public void prePersist(MyEntity target) {
log("new object inserted", target);
}
@PreRemove
public void preRemove(MyEntity target) {
log("entity deleted", target);
}
@PreUpdate
public void preUpdate(MyEntity target) {
MyEntity previousState = target.getSavedState();
}
}
关于java - 如何使用@EntityListeners记录@Entity更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55373885/