ただし、独自のソリューションを実装すれば可能です。監査ログのビジネス要件についても同じ必要性があったため、独自のAuditFieldアノテーションを設計し、監査ログに記録するフィールドに適用しました。
これが1つのエンティティBeanの例です-サイト。
@AuditField(exclude={EntityActionType.DELETE})
@Column(name = "site_code", nullable = false)
private String siteCode;
したがって、この例は、「siteCode」がDELETEアクションを除いてログを監査するフィールドであることを示しています。(EntityActionTypeは列挙型であり、CRUD操作が含まれています。)
また、EntityListenerにはコードのこの部分があります。
@PostPersist
public void created(Site pEntity) {
log(pEntity, EntityActionType.CREATE);
}
@PreUpdate
public void updated(Site pEntity) {
log(pEntity, EntityActionType.UPDATE);
}
@PreRemove
public void deleted(Site pEntity) {
log(pEntity, EntityActionType.DELETE);
}
ここで、log()で行う必要があるのは、ログを監査するフィールドと、オプションで含まれるカスタムアクションを把握することです。
ただし、考慮すべきことがもう1つあります。別のエンティティ変数に注釈を付ける場合、エンティティのどのフィールドをログに記録する必要がありますか?(つまり、連鎖ロギング)
エンティティ内でのみ@AuditFieldで注釈を付けるか、その他の方法で注釈を付けるかは、あなたの選択です。私の場合、DBテーブルのPKであるエンティティIDのみをログに記録することにしました。しかし、ビジネスが変わる可能性があることを想定して、柔軟にしたいと思いました。したがって、すべてのエンティティは、基本エンティティクラスからのauditValue()メソッドを実装する必要があり、デフォルトの実装(オーバーライド可能)はそのIDを返すことです。