Rom*_*las 23 java hibernate 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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想要检索以下版本Foo:
AuditReader reader = AuditReaderFactory.get(getEntityManager());
Foo revision = (Foo) reader.createQuery().forEntitiesAtRevision(Foo.class, 42).getSingleResult();
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我想要检索所有数据时(即延迟加载时bars),我得到错误ORA-00942: table or view does not exist,因为它试图查询:
select ... from T_FOO_BAR_AUD x, T_BAR y where ...
Run Code Online (Sandbox Code Playgroud)
我虽然使用@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED),Hibernate Envers将保持与当前实体的Bar项目的链接.
那么如何解决我的问题,而不必明确地审计表T_BAR和T_FOO_BAR(连接表)?换句话说,当我bars从我的修订实体中检索列表时,我bars从我当前的实体中获取列表(作为之间的链接Foo和Bar未被审计的链接).
谢谢.
bvu*_*laj 27
看起来你正在使用@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)当你应该@NotAudited在你的情况下使用.
RelationTargetAuditMode.NOT_AUDITED将不会审核目标实体.它仍将尝试审核连接表的List<Bar>属性Foo,从而审计连接表.
来自文档:
如果要审计目标实体未被审计的关系(例如,类似字典的实体,不会更改而不必审计),只需用它进行注释即可
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED).然后,在读取实体的历史版本时,关系将始终指向"当前"相关实体.
| 归档时间: |
|
| 查看次数: |
16419 次 |
| 最近记录: |