2012-07-12 7 views
13

Hibernate Enversを使用してエンティティを監査します。Hibernate Enversを使用して結合テーブルおよび関連するエンティティを監査する方法はありますか?

私は1監査対象エンティティFooを持っており、これはプロパティとしてList<Bar>を持っています。しかし、私はBarのエンティティを監査したくありません。

@Entity 
@Audited 
public class Foo { 

    @JoinTable(name = "T_FOO_BAR", joinColumns = @JoinColumn(name = "FOO_ID"), inverseJoinColumns = @JoinColumn(name = "BAR_ID")) 
    @ManyToMany(cascade = PERSIST) 
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 
    public List<Bar> getBars() { 
     return bars; 
    } 

} 

は今、私はFooの改正取得したい:したがって、私はそれを書いた私はすべてのデータを取得したい場合、残念ながら

AuditReader reader = AuditReaderFactory.get(getEntityManager()); 
    Foo revision = (Foo) reader.createQuery().forEntitiesAtRevision(Foo.class, 42).getSingleResult(); 

(すなわちときに怠惰な負荷bars

select ... from T_FOO_BAR_AUD x, T_BAR y where ... 

私も@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)を使用して、休止状態Enversがリンクを保つだろうと:それは照会しようとしたとして、私は、エラーを取得しORA-00942: table or view does not exist現在のの項目はの現在のエンティティです。

テーブルT_BART_FOO_BAR(結合テーブル)を明示的に監査する必要なく、私の問題をどのように解決できますか?他の言葉では、リビジョンエンティティからbarsのリストを取得すると、現在のエンティティからbarsのリストを取得します(FooBarの間のリンクは監査されません)。

ありがとうございました。

答えて

18

@NotAuditedをご使用の場合は、@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)を使用しているようです。

RelationTargetAuditMode.NOT_AUDITEDは、単にターゲットエンティティを監査しません。それでもList<Bar>プロパティー(Foo)、つまり結合テーブルを監査しようとします。ドキュメントから

ターゲット・エンティティが ない監査対象の関係を、(監査する場合はそれが変更されない辞書のようなエンティティ、 との例の場合であると監査する必要はありません)、 に@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)と注釈を付けるだけです。 次に、エンティティの履歴バージョンを読むとき、関係は は常に "現在の"関連エンティティを指します。

関連する問題