0

HibernateEnversのソリューションを実装しました。

システムユーザー名を格納する独自のクラスを作成して、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

        }

    }

これでうまくいきますが、私がやりたいのは、監査対象のテーブル名を含む、より包括的なレコードを作成することです。

誰かが私がこれを行う方法を知っていますか?テーブル名の記録に関連するドキュメントが見つかりませんか?

4

3 に答える 3

3

変更されたエンティティクラスを取得する方法については、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);
        }
    }
于 2013-01-04T19:25:24.860 に答える
1

Envers がすぐに監査されるレコードのテーブル名を追跡できるかどうかはわかりませんが、エンティティ名を追跡できることはわかっていますが、これは3 つの異なる方法で有効にすることができます

于 2013-01-04T17:45:25.163 に答える
0

DefaultTrackingModifiedEntitiesRevisionEntityorg.hibernate.envers.track_entities_changed_in_revision パラメーターを true に拡張または構成できます。

Envers Doc:改訂中に変更されたエンティティ名の追跡を参照してください。

于 2014-11-20T05:51:57.803 に答える