3

私は監査に対して非常に具体的なニーズがあります。

次のクラスを検討してください (簡単にするために、クラスの名前を変更し、不要なコードを削除しました)

[Audited]
public class Client
{
  [NotAudited]
  public virtual IList<Order> Orders {get; set;}
}

Orders プロパティが空でない場合にのみ、Client エンティティを監査する必要があります。

それはまったく可能ですか?もしそうなら、どうすればいいですか?

4

1 に答える 1

3

何らかの状態に基づいて実行時の監査をオフにする場合は、独自のカスタム サブクラスを作成しAuditEventListener、その型のインスタンスをIntegrateWithEnversメソッドに渡すことができます。

OnPostDeleteサブクラスでは、、、、、およびをOnPostInsertオーバーライドできます。あなたの場合、おそらく と を確認する必要があります。監査したい場合は、基本メソッドを呼び出すだけです。監査したくない場合は、実装で何もしません。OnPostRecreateCollectionOnPostUpdateOnPreRemoveCollectionOnPreUpdateCollectionevt.Entityevt.AffectedOwnerOrNull

ただし、単純なロギングに Envers を使用するだけの場合は、おそらくこれを行う必要があることに注意してください。これを使用して履歴インスタンスを再作成する場合、一部の履歴イベントの監査を「削除」すると、履歴インスタンスをロードするときに問題が発生する可能性があります。その場合、これを行うのが安全なのは、エンティティがOrdersその存続期間全体にわたって持っているか持っていない場合のみです。

于 2015-04-23T08:55:37.273 に答える