簡體   English   中英

Hibernate Envers如何記錄其他審核數據,例如正在審核的表名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM