[英]Hibernate Envers How to record additional audit data such as table name being audited
我已經實現了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
}
}
這可以完成工作,但是我想做的是做一個更全面的記錄,其中包括要審核的表名。
有誰知道我該怎么做。 我找不到與記錄表名有關的任何文檔?
請參閱envers文檔中的示例15.2,如何獲取修改后的實體類。 然后稍微更改代碼以從實體類中獲取表名(假設您在實體類上使用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);
}
}
我不知道Envers是否可以開箱即用地跟蹤要審核的記錄的表名,但是我知道它可以跟蹤實體名,而可以通過三種不同的方式啟用
您可以擴展DefaultTrackingModifiedEntitiesRevisionEntity
,或將org.hibernate.envers.track_entities_changed_in_revision參數配置為true。
請參閱Envers Doc: 修訂期間修改的跟蹤實體名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.