每行实现审计跟踪的方法

时间:2011-05-18 10:15:04

标签: hibernate oracle11g audit-trail

我想在我的所有表格中添加两列[创建时间]& [Modify Time]用于捕获审计跟踪。将来这些字段可用于对表进行分区。请告知这样做的最佳方法是什么?通过DB中的某些触发器或通过代码更新这些值是明智的。我们正在使用Hibernate API与Oracle 11g进行通信。

2 个答案:

答案 0 :(得分:1)

由于您已经在使用Hibernate,请查看Hibernate Envers

  

Envers项目旨在实现对持久化类的轻松审计/版本控制。您需要做的就是使用@Audited注释要审核的持久类或其某些属性。对于每个经审计的实体,将创建一个表,该表将保存对实体所做更改的历史记录。然后,您可以毫不费力地检索和查询历史数据。

这是更重量级的解决方案,但可以让您的应用程序完全控制。

或者,您可以通过Oracle PL / SQL触发器执行此操作,但您的应用程序将对此进行有限的控制。

答案 1 :(得分:0)

有利有弊。

就个人而言,我使用触发器。

这样做会导致一个有趣的边缘情况,当你有一个主表和许多相关表,你想要分享它的审计跟踪。说订单+订单行+ [许多其他相关表格]与订单相关。在这种情况下,要审核的有趣数据是订单,因此订单应该包含与审计相关的详细信息。如果您为每个插入/更新/删除订单行+ [许多其他相关表格]启动了触发器,那么性能最终会受到影响。