Hibernate Envers如何记录其他审计数据,例如正在审计的表名

时间:2013-01-04 16:28:06

标签: java spring hibernate jboss hibernate-envers

我已经实现了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

        }

    }

这样做,但我想做的是制作更全面的记录,包括正在审核的表名。

有谁知道我怎么做到这一点。我找不到任何与记录表名有关的文件?

3 个答案:

答案 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