【发布时间】:2016-10-20 10:54:14
【问题描述】:
我已经标记了我的实体@Audited,我可以看到它记录了新修订的修订号和时间戳,但是如何添加自定义元数据?我相信这一定是可能的,因为org.springframework.data.RevisionMetadata 具有带有以下Javadoc 的getDelegate() 方法:
返回可能提供更详细的实现特定信息的底层修订元数据。
【问题讨论】:
标签: spring-data hibernate-envers
我已经标记了我的实体@Audited,我可以看到它记录了新修订的修订号和时间戳,但是如何添加自定义元数据?我相信这一定是可能的,因为org.springframework.data.RevisionMetadata 具有带有以下Javadoc 的getDelegate() 方法:
返回可能提供更详细的实现特定信息的底层修订元数据。
【问题讨论】:
标签: spring-data hibernate-envers
从纯 Hibernate Envers 的角度来看,如果您希望您的修订实体存储有关修订的附加上下文信息,例如谁修改了实体或更改的原因,那么您可能希望通过 RevisionListener 来执行此操作回调与 DefaultRevisionEntity 的自定义扩展相结合。
例如:
@Entity
@RevisionEntity(CustomRevisionListener.class)
public class CustomRevisionEntity extends DefaultRevisionEntity {
private String userName;
/* getter/setters */
}
public class CustomRevisionListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
CustomRevisionEntity cre = (CustomRevisionEntity)revisionEntity;
cre.setUserName( UserContextHolder.getUserContext().getUserName() );
}
}
Envers 将检测到带有特殊注释的@RevisionEntity 实体类并使用它。它还将检测指定的RevisionListener 实现,并在构造新的修订实体时实例化并回调该类。
不幸的是,我无法说明这对于spring-data 和spring-data-envers 项目的使用意义如何。
【讨论】:
Long entityId = 1L; Revision revision = enversRepository.findLastChangeRevision(entityId); CustomRevisionEntity metadata = revision.getMetadata().getDelegate();