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 エンティティーへの監査サポートの追加
- デプロイメントに適した利用可能な監査パラメーターを設定します。詳細は Configure Envers Parameters を参照してください。
- 監査する Jakarta Persistence エンティティーを開きます。
-
org.hibernate.envers.Audited
インターフェイスをインポートします。 監査する各フィールドまたはプロパティーに
@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
というテーブルが作成されます。