我正在考虑从自我实现的版本控制解决方案切换到Hibernate Envers,但是我还不确定。我已经阅读了很多,但是我担心模式更改以及在根据较旧的模式对数据进行历史化处理后,Envers如何处理它们。

您在Envers方面的经验如何?您如何使用Envers处理架构变更和现有数据?

更新1:

这不仅仅是添加从表中删除简单的列,还包括在将简单的Forein-Key-Relationship更改为具有两个1:n关系的单独实体时(带有属性列的M2M。这是数据模型中的“逻辑”更改。当使用Envers时,如何处理?是否已经按照旧模型对历史数据进行了编码?是否可以手动编写sql脚本并将其传输到新的表示形式中?

最佳答案

以我的经验,Envers只是将实体表中的每个字段复制到其审计表中。审核表中的复制字段没有约束,包括可空性和外键约束,因此在实际表上添加或删除此类约束没有问题。您添加到实体中的任何类型的关系都只是在Envers下添加的新审计列和/或表,您可以根据自己的历史背景正确地解释它们。

对于您的示例,如果我理解正确,那么从基于联接列的关系切换为基于联接表的关系时,您只需将旧的联接列与联接表共存,并在切换时就可以了,前者将不再受后者的支持。您的历史记录将被完全保留,包括您进行此切换的事实。如果希望所有旧数据都适合审计表中的新模型,则由您决定是否进行迁移。

关于java - Envers如何处理架构更改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5764701/

10-10 12:34