Hibernate 实现每行审核跟踪的方法

Hibernate 实现每行审核跟踪的方法,hibernate,oracle11g,audit-trail,Hibernate,Oracle11g,Audit Trail,我想在我的所有表[Create Time]&[Modify Time]中添加两列以捕获审计跟踪。将来,这些字段可能会用于对表进行分区。请建议最好的方法是什么?明智的做法是通过DB的一些触发器来实现,或者通过代码更新这些值。我们正在使用Hibernate API与Oracle 11g对话。既然您已经在使用Hibernate,请查看: Envers项目旨在实现持久类的轻松审核/版本控制。您所要做的就是用@Audited注释您要审核的持久类或其某些属性。对于每个审计实体,将创建一个表,该表将保存对该实

我想在我的所有表[Create Time]&[Modify Time]中添加两列以捕获审计跟踪。将来,这些字段可能会用于对表进行分区。请建议最好的方法是什么?明智的做法是通过DB的一些触发器来实现,或者通过代码更新这些值。我们正在使用Hibernate API与Oracle 11g对话。

既然您已经在使用Hibernate,请查看:

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

这是一个更为重要的解决方案,但可以让您的应用程序完全控制


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

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

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

这是一个更为重要的解决方案,但可以让您的应用程序完全控制


或者,您可以通过Oracle PL/SQL触发器来实现这一点,但您的应用程序对这一点的控制有限。

有优点也有缺点

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


但这样做会导致一个有趣的边缘案例,当您有一个主表和许多相关表,您希望共享它们的审计跟踪时。比如订单+订单行+与订单相关的[许多其他相关表格]。在本例中,需要审计的有趣数据是订单,因此订单应该包含与审计相关的详细信息。如果每次插入/更新/删除订单行+[许多其他相关表格]都有触发因素,那么性能最终会受到影响。

有优点也有缺点

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

但这样做会导致一个有趣的边缘案例,当您有一个主表和许多相关表,您希望共享它们的审计跟踪时。比如订单+订单行+与订单相关的[许多其他相关表格]。在本例中,需要审计的有趣数据是订单,因此订单应该包含与审计相关的详细信息。如果您有一个触发器,可以触发订单行的每次插入/更新/删除+[许多其他相关表],那么性能最终会受到影响