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