2016-05-17 11 views
0

私はEnversを使用してデータベースの変更を監査しています。アノテーションを追加しないエンバティブエンティティ

今、私は私が監査したい依存関係からクラスを持っています。私はソースコードを編集することができないので、単純な@Auditedを注釈に追加することはできません。

私は、エンティティを監査するが、注釈を追加する方法はありませんでしたように、それが思われることに驚きました。何か方法がありますか手動でエンティティを監査のために登録しますか?

申し訳ありませんが、私は答えはかなり明白であろう感じているが、私は今のところ解決策を見つけることができませんでした。

答えて

1

それは(How to put envers annotations into XML Mapping Metadata(orm.xml) fileを参照)直接的な方法では不可能です。

@Audited 
public class ClassA{ 

    private ClassNotAuditable instance; 

    @Audited 
    public ClassNotAuditable getInstance(){ 
    return instance; 
    } 

} 

をしかし、監査するクラスが監査可能としてマークされていないためEnversはそれを無視します:あなたは、監査可能として、このクラス(すなわちClassNotAuditable)を使用して監査済みのクラス(。。すなわちにClassA)の関係に注釈を付けることができます。クラスに監査可能であるがアノテーションを付けることはできません。

しかし、回避策を試すことができます。自分の別のクラスで監査したいクラスを拡張し、Auditableとしてマークします。この新しいクラスを使用するには、自分のクラスの参照を書き直してください。多分、これはトリックを行うでしょう。

@Auditable 
public class NewClassAuditable extends ClassNotAuditable{ 
... 
} 

@Audited 
public class ClassA{ 

    private NewClassAuditable instance; 

    @Audited 
    public NewClassAuditable getInstance(){ 
    return instance; 
    } 

} 
+0

はお時間をいただき、ありがとうございます。依存関係のため、クラスを拡張することはできません。私は問題を迅速かつ汚れた方法で解決しました。私は 'ClassNotAuditable'のソースを自分のプロジェクトにコピーし、アノテーションを追加しました。私はエンバーがもっと柔軟であったらいいのに。 – samjaf

関連する問題