6.3. 監査ストラテジー

6.3.1. 監査ストラテジーについて

監査ストラテジーは、監査情報の永続化、クエリー、および保存方法を定義します。Hibernate Evers には現在、以下の 2 つの監査ストラテジーがあります。

デフォルトの監査ストラテジー
  • このストラテジーは、開始リビジョンとともに監査データの保存を永続化します。監査されたテーブルで挿入、更新、削除される行ごとに、有効性の開始リビジョンとともに、監査テーブルに 1 つ以上の行を挿入します。
  • 監査テーブルの行は、挿入後には更新されません。監査情報のクエリーはサブクエリーを使用して、監査テーブルの適用可能な行を選択します。これはスピードが遅く、インデックス作成が困難です。
有効性監査ストラテジー
  • このストラテジーは、監査上の開始リビジョンと最後のリビジョンを保存します。監査されたテーブルで挿入、更新、削除される行ごとに、有効性の開始リビジョンとともに、監査テーブルに 1 つ以上の行を挿入します。
  • 同時に、以前の監査行 (利用可能な場合) の終了リビジョンフィールドは、このリビジョンに設定されます。監査情報のクエリーは、サブクエリーの代わりに、between start and end revision の間で使用できます。つまり、追加の更新により、監査情報の永続化は多少遅くなりますが、監査情報の取得はかなり速くなります。
  • これは、インデックスを追加して改善することもできます。

監査の詳細は、永続クラスの監査について を参照してください。アプリケーションの監査ストラテジーを設定するには、Set the Auditing Strategy を参照してください。

6.3.2. 監査ストラテジーの設定

JBoss EAP では、以下の 2 つの監査ストラテジーがサポートされています。

  • デフォルトの監査ストラテジー
  • 有効性監査ストラテジー
監査ストラテジーの定義

アプリケーションの persistence.xml ファイルで org.hibernate.envers.audit_strategy プロパティーを設定します。プロパティーが persistence.xml ファイルで設定されていない場合は、デフォルトの監査ストラテジーが使用されます。

デフォルトの監査ストラテジーの設定

<property name="org.hibernate.envers.audit_strategy" value="org.hibernate.envers.strategy.DefaultAuditStrategy"/>

有効性監査ストラテジーの設定

<property name="org.hibernate.envers.audit_strategy" value="org.hibernate.envers.strategy.ValidityAuditStrategy"/>

6.3.3. Jakarta Persistence エンティティーへの監査サポートの追加

手順

JBoss EAP は Hibernate Envers を介してエンティティー監査を使用し、永続クラスのこれまでの変更を追跡します。ここでは、Jakarta Persistence エンティティーの監査サポートの追加について説明します。

Jakarta Persistence エンティティーへの監査サポートの追加

  1. デプロイメントに適した利用可能な監査パラメーターを設定します。詳細は Configure Envers Parameters を参照してください。
  2. 監査する Jakarta Persistence エンティティーを開きます。
  3. org.hibernate.envers.Audited インターフェイスをインポートします。
  4. 監査する各フィールドまたはプロパティーに @Audited アノテーションを適用するか、クラス全体に対して 1 度適用します。

    例: 2 つのフィールドの監査

    import org.hibernate.envers.Audited;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Column;
    
    @Entity
    public class Person {
        @Id
        @GeneratedValue
        private int id;
    
        @Audited
        private String name;
    
        private String surname;
    
        @ManyToOne
        @Audited
        private Address address;
    
        // add getters, setters, constructors, equals and hashCode here
    }

    例: クラス全体の監査

    import org.hibernate.envers.Audited;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Column;
    
    @Entity
    @Audited
    public class Person {
        @Id
        @GeneratedValue
        private int id;
    
        private String name;
    
        private String surname;
    
        @ManyToOne
        private Address address;
    
        // add getters, setters, constructors, equals and hashCode here
    }

Jakarta Persistence エンティティーが監査用に設定されている場合は、履歴の変更を保存するために _AUD というテーブルが作成されます。