Hibernate Envers を使用してエンティティを監査しています。
Foo
プロパティとしてを持つ監査済みエンティティ が 1 つあり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
にエラーが発生します。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 は現在のエンティティのBar
アイテムとのリンクを保持すると思いました。
T_BAR
では、テーブルとT_FOO_BAR
(結合テーブル)を明示的に監査することなく、どうすれば問題を解決できますか? つまり、bars
リビジョン エンティティからのリストを取得すると、現在のエンティティから のリストが取得されます (とbars
の間のリンクは監査されないため)。Foo
Bar
ありがとう。