这是我的用例
我有两个实体:Personn 和 Email(@OneToMany 关系)。两者都经过审核。
首先我创建一个新的 Personn,带有一个电子邮件(=> 他们都有一个修订版 1),然后我修改了电子邮件(=> 电子邮件有一个修订版 2,但 Personn 只有一个修订版 1)
在 Web 应用程序中,最终用户只有一个视图来显示人员的属性以及他的电子邮件属性。在此视图中,我想显示此 Personn 的所有现有修订。但是当我查询审计系统时,它没有显示修订版 2,因为 Personn 没有被修改。
我理解技术问题,但从最终用户的角度来看,他希望看到修订版 2,因为他修改了人员的电子邮件!他不知道(也不必知道)我们决定将这些信息分成 2 个 Java 对象。当然,这个问题不仅适用于 Personn-Email 关系(我在 Personn 和其他显示在同一视图中的对象之间有很多关系 - Adress、Job、Site、Card 等等)
我想到了2个解决方案:
1-查询所有关系以了解是否存在修订(但我想它会生成一个大请求或多个请求 - 我有很多关系)。
2- 将“hibernate.listeners.envers.autoRegister”设置为 false,编写我自己的 EnversIntegrator 和事件实现。在事件实现中(覆盖默认的 Envers 实现),当电子邮件的属性被修改时,我将为 Personn 创建一个 ModWorkUnit(当然它不会被硬编码:在 personn 字段上添加一个自定义注释,如 @AuditedPropagation)。该解决方案的缺陷是即使没有修改,也要为 Personn 创建很多行。
您如何看待这些解决方案?您知道解决这种用例的更好方法吗?
感谢您的建议。