【发布时间】:2011-08-27 22:27:19
【问题描述】:
我想在我的所有表中添加两列 [创建时间] 和 [修改时间] 以捕获审计跟踪。将来这些字段可能用于对表进行分区。请建议这样做的最佳方法是什么?通过数据库中的一些触发器或通过代码更新这些值是否明智。我们正在使用 Hibernate API 与 Oracle 11g 通信。
【问题讨论】:
标签: hibernate oracle11g audit-trail
我想在我的所有表中添加两列 [创建时间] 和 [修改时间] 以捕获审计跟踪。将来这些字段可能用于对表进行分区。请建议这样做的最佳方法是什么?通过数据库中的一些触发器或通过代码更新这些值是否明智。我们正在使用 Hibernate API 与 Oracle 11g 通信。
【问题讨论】:
标签: hibernate oracle11g audit-trail
由于您已经在使用 Hibernate,请查看Hibernate Envers:
Envers 项目旨在实现对持久类的轻松审计/版本控制。您所要做的就是使用@Audited 注释您想要审计的持久类或其某些属性。对于每个被审计的实体,将创建一个表,其中将保存对该实体所做的更改的历史记录。然后,您可以轻松检索和查询历史数据。
这是更重量级的解决方案,但可以让您的应用程序完全控制。
或者,您可以通过 Oracle PL/SQL 触发器执行此操作,但您的应用程序对此的控制有限。
【讨论】:
各有利弊。
就我个人而言,我使用触发器。
不过,这样做会导致一个有趣的极端情况,即当您有一个主表和许多要共享其审计跟踪的相关表时。说与订单相关的订单 + 订单行 + [许多其他相关表格]。在这种情况下,要审计的有趣数据是订单,因此订单应该包含与审计相关的详细信息。如果您有一个触发器会在订单行的每个插入/更新/删除 + [许多其他相关表] 中触发,那么性能最终会受到影响。
【讨论】: