我已经实现了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
}
}
这样做,但我想做的是制作更全面的记录,包括正在审核的表名。
有谁知道我怎么做到这一点。我找不到任何与记录表名有关的文件?
答案 0 :(得分:3)
请参阅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);
}
}
答案 1 :(得分:1)
我不知道Envers是否可以跟踪正在审核的记录的表名,但我知道它可以跟踪实体名称,而不是{{3 }}
答案 2 :(得分:0)
您可以扩展DefaultTrackingModifiedEntitiesRevisionEntity
,或将org.hibernate.envers.track_entities_changed_in_revision参数配置为true。
请参阅Envers文档:Tracking entity names modified during revisions