是否可以阻止Hibernate Envers在审计表中存储实体,除非它被修改

时间:2013-03-15 04:49:48

标签: hibernate hibernate-envers

我需要维护数据库中数据修改的历史记录。这些修改不是很常见,因此似乎可以存储整行而不仅仅是差异,这在空间方面会更有效。 Hibernate envers似乎是一个不错的解决方案。

现在我注意到Audit表更像是一个影子表,它将数据存储在第一个插件本身上。是否可以阻止envers存储审计信息,直到第一次更新为止。我只想减少数据库的磁盘空间,因为我可能无法在非常高性能的服务器上运行。 我希望实际表包含最新数据和Audit表,以包含仅当前行的历史数据。我没有在persistence.xml中使用任何特定配置。 Hibernate 4.1似乎找到了带注释的审计类。 我想我应该处理插入后的监听器,但不确定我应该用它做什么。

1 个答案:

答案 0 :(得分:0)

之前已经提出要求,虽然它可能是一个很好的功能,但它肯定不会有自己的问题来源。

了解Envers附带2个审核策略:DefaultValidity

DefaultAuditStrategy是一个非常基本的策略,它不期望审计表中存在任何先前的修订行。对于仅存储已更改行的情况,此特定策略可能很容易使用。

但不幸的是,另一种策略不会。

ValidityAuditStrategy期望当检测到更改时,存在先前的审核行来操作有效性策略列。如果审计表没有存储插入,那么第一个更改将失败,因为策略将确定它无法正确操作策略字段。

这可能会在未来某个时候发生变化,但截至目前我们还不支持这种情况。