我需要维护数据库中数据修改的历史记录。这些修改不是很常见,因此似乎可以存储整行而不仅仅是差异,这在空间方面会更有效。 Hibernate envers似乎是一个不错的解决方案。
现在我注意到Audit表更像是一个影子表,它将数据存储在第一个插件本身上。是否可以阻止envers存储审计信息,直到第一次更新为止。我只想减少数据库的磁盘空间,因为我可能无法在非常高性能的服务器上运行。 我希望实际表包含最新数据和Audit表,以包含仅当前行的历史数据。我没有在persistence.xml中使用任何特定配置。 Hibernate 4.1似乎找到了带注释的审计类。 我想我应该处理插入后的监听器,但不确定我应该用它做什么。
答案 0 :(得分:0)
之前已经提出要求,虽然它可能是一个很好的功能,但它肯定不会有自己的问题来源。
了解Envers附带2个审核策略:Default
和Validity
。
DefaultAuditStrategy
是一个非常基本的策略,它不期望审计表中存在任何先前的修订行。对于仅存储已更改行的情况,此特定策略可能很容易使用。
但不幸的是,另一种策略不会。
ValidityAuditStrategy
期望当检测到更改时,存在先前的审核行来操作有效性策略列。如果审计表没有存储插入,那么第一个更改将失败,因为策略将确定它无法正确操作策略字段。
这可能会在未来某个时候发生变化,但截至目前我们还不支持这种情况。