我正在使用 Hibernate Envers 记录对数据库的所有更改。我注意到,当我添加一个与另一个实体具有 ManyToOne 关系的实体时,也对一侧实体进行了修订。外键位于关系的多方面,因此当在多方面添加实体时,映射一侧的实体不会更新。但仍在为映射一侧的实体插入修订。
我使用此处建议的方法禁用了 OneToMany 映射的审核: Whats the difference between @NotAudited and RelationTargetAuditMode.NOT_AUDITED in Hibernate EnVers?
现在这个答案表明,当我检索关系时,它总是会返回当前实体。这是否意味着我无法获得旧版本映射一侧的信息?
目前我不确定如何查询已审核的日志,但从表结构看来,我可以随时获取实体的当前状态。
假设我选择不审计 OneToMany 映射,那么下面的表结构会发生什么?
审核 OneSideEntity 修订版 1 的 OneSideEntity 修订版 5 的 OneSideEntity
审核 ManySideEntity1 ManySideEntity1 at revision 2 ManySideEntity1 at revision 3 ManySideEntity1 ManySideEntity1 at revision 2
审核 ManySideEntity2 版本 6 的 ManySideEntity2 版本 7 的 ManySideEntity2 版本 8 的 ManySideEntity2 版本 9 的 ManySideEntity2
两个 ManySideEntity 对象都指向 OneSideEntity。
当我在修订版 5 - [ManySideEntity1] 或 [ManySideEntity1, ManySideEntity2] 查询一对多映射时,我将获得哪些实体。
上述问题表明我会得到后者,但在修订版 5 中我更喜欢第一个。我在这里错过了什么吗?
同样对于给定的时间戳,我认为我可以找到小于该时间戳的所有修订。这可以确保我在 AUDITING 日志中有准确的表信息。如果答案是 [ManySideEntity1, ManySideEntity2] 为什么会丢失信息?