我使用Hibernate Envers来审计我的实体。如何不使用Hibernate Envers审计连接表和相关实体?
我有一个审计实体,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
) ,我得到的错误ORA-00942: table or view does not exist
,因为它试图查询:
select ... from T_FOO_BAR_AUD x, T_BAR y where ...
不过,我觉得,使用@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
,休眠Envers会保留链接s与Bar
项目当前实体。
那么我怎样才能解决我的问题,而不必明确审计表T_BAR
和T_FOO_BAR
(连接表)?换句话说,当我从我的修订实体中检索bars
列表时,我从我的当前实体获得bars
的列表(因为Foo
和Bar
之间的链接未经审核)。
谢谢。