私はHibernateEnversを使用してエンティティを監査しています。
プロパティとして_List<Bar>
_を持つ1つの監査済みエンティティFoo
があります。ただし、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
を遅延ロードする場合)、クエリを実行しようとすると、エラー_ORA-00942: table or view does not exist
_が発生します。
_select ... from T_FOO_BAR_AUD x, T_BAR y where ...
_
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
を使用すると、Hibernate EnversはcurrentエンティティのBar
アイテムとのリンクを保持します。
では、テーブル_T_BAR
_と_T_FOO_BAR
_(結合テーブル)を明示的に監査せずに、どうすれば問題を解決できますか?つまり、リビジョンエンティティからbars
のリストを取得すると、現在のエンティティからbars
のリストが取得されます(Foo
とBar
の間のリンクは監査されないため)。
ありがとう。
ケースで_@NotAudited
_を使用する必要があるときに、@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
を使用しているようです。
_RelationTargetAuditMode.NOT_AUDITED
_は単にターゲットエンティティを監査しません。それでも、Foo
の_List<Bar>
_プロパティ、つまり結合テーブルを監査しようとします。
ドキュメントから:
ターゲットエンティティが監査されていない関係を監査する場合(たとえば、変更されず、監査する必要がない辞書のようなエンティティの場合)、
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
。次に、エンティティの履歴バージョンを読み取るとき、リレーションは常に「現在の」関連エンティティを指します。