我已经实现了 Hibernate Envers 的解决方案。
我通过创建自己的类来存储系统用户名来扩展 RevisionLister:
import org.hibernate.envers.RevisionListener;
public class CustomRevisionListener implements RevisionListener {
public void newRevision(Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setUsername(System.getProperty("user.name")); // for testing
}
}
这完成了工作,但我想做的是制作更全面的记录,其中包括正在审核的表名。
有谁知道我该怎么做。我找不到任何与记录表名相关的文档?
最佳答案
参见example 15.2 in the envers doc如何获取修改后的实体类。然后稍微修改一下代码,从实体类中获取表名(假设你在实体类上使用了JPA/Hibernate注解):
public class CustomEntityTrackingRevisionListener
implements EntityTrackingRevisionListener {
@Override
public void entityChanged(Class entityClass, String entityName,
Serializable entityId, RevisionType revisionType,
Object revisionEntity) {
// either javax.persistence.Table or org.hibernate.annotations.Table
Table tableAnnotation = entityClass.getAnnotation(Table.class);
if (tableAnnotation != null)
String tableName = tableAnnotation.getName();
((CustomTrackingRevisionEntity)revisionEntity).addTable(tableName);
}
}
关于java - Hibernate Envers 如何记录额外的审计数据,例如被审计的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14160947/