【问题标题】:Is it possible to prevent Hibernate Envers from storing entity in audit table unless it is modified是否可以防止 Hibernate Envers 将实体存储在审计表中,除非它被修改
【发布时间】:2016-12-09 09:41:36
【问题描述】:

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

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

【问题讨论】:

  • 你找到办法了吗?我正在尝试实现类似的目标,但我不想保存任何数据,我只想知道何时创建/修改/删除了实体。如果您能分享您的经验,不胜感激。
  • 不,我没有……暂时我决定忍受这个限制。一些可能对您有帮助的链接:stackoverflow.com/questions/12800540/…
  • @Vikram 如果你找到答案,请回答这个问题......可能对来到这里寻找相同问题的其他人有所帮助。
  • 首先我为延迟回复道歉。当然,现在我们自己编写了一个简单的审计框架,因为我们认为我们不需要完整的丰富功能集。但是如果将来envers支持忽略修订数据存储,我一定会在这里发布解决方案。截至目前,该功能尚未在 envers 中实现。

标签: hibernate hibernate-envers


【解决方案1】:

这已经被请求过,虽然这可能是一个不错的功能,但它绝对没有自己的问题来源。

了解 Envers 附带 2 种审计策略:DefaultValidity

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

但不幸的是,其他策略不会。

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

这可能会在未来的某个时候改变,但目前我们不支持这种情况。

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 2013-06-28
    • 2019-08-20
    • 2021-04-01
    • 2019-01-22
    • 2011-07-10
    • 2019-11-16
    • 1970-01-01
    • 2017-09-07
    相关资源
    最近更新 更多