首页 文章

使用Hibernate Envers进行审计

提问于
浏览
0

我正在使用hibernate envers来创建我的数据历史,它也运行良好 . 这里的问题是,它在历史表中创建重复数据,即在历史表中创建数据是否在审计表中有任何变化 . 我只想更改存储在历史记录表中的字段 . 我是hibernate envers的新手 . 我能做什么?

1 回答

  • 0

    如果我理解你的问题,那么Envers不会这样,至少不是开箱即用的 .

    Envers是一种提交快照审计解决方案,在提交之前,它会检查审计的实体状态并确定是否已修改任何属性,并在该时间点记录该实体的所有审计字段的快照 . 这意味着没有创建审计条目的唯一时间是没有修改任何属性 .

    但它也使用快照方法,因为它非常适合查询API .

    考虑如果在给定修订中查找实体的查询必须从该修订中读取所有行回到开始时间,迭代每一行并合并捕获的列状态以仅实例化单行结果集,则会出现效率低下的情况 .

    使用快照方法,它归结为以下查询,没有循环或迭代工作 .

    SELECT e FROM AuditedEntity e WHERE e.revisionNumber = :revisionNumber
    

    从数据页读取数据页的数据库和用于流式传输单行结果集而不是多行结果集到客户端的网络,从I / O角度来看,效率要高得多 .

    我要说的是,在这种情况下,当你将应用程序与其他任何方式执行此操作所带来的成本和低效率进行比较时,这种说法确实成立了.1378678_ .

    如果这是'd like Envers to support, perhaps via some user configured strategy then you'欢迎在JIRA中为 hibernate-envers 记录新的功能请求,我可以看看它的可行性 .

相关问题