2

我正在尝试实现一个简单的基于 Envers + 拦截器的方法来审核我的 Hibernate 实体。为此,按照典型方法,BaseEntity所有审计属性都有一个:

BaseEntity{
    createdOn;
    createdBy;
    updatedOn;
    updatedBy;
}

在 中AuditInterceptor,我已经重写onFlushDirtyonSave操作上述属性的方法,具体取决于它是实体保存还是更新。一切都按预期进行保存和更新。

我面临的问题是:我需要一种方法来操作删除操作的上述属性。覆盖onDelete确实为我提供了state[]数组的句柄,但修改它不会反映在 _AUD(审计)表中。简而言之:我也希望能够在审计表中审计删除操作。

有没有解决方法,或者我错过了什么?

4

1 回答 1

1

我认为您不需要实现 onSave、onFlushDirty 方法。

您只需要实现 RevisionListener 接口。如果您遵循此处的模式,您也不需要将这些属性(createdOn 等)添加到您的实体中(除非您需要它们进行正常操作)。

有关详细信息,请参阅http://docs.jboss.org/hibernate/envers/3.6/reference/en-US/html_single/#revisionlog 。在此处的示例中,他们使用 Seam 来获取登录用户。

Envers 允许您将审计与实体分开,从而使您的正常模型保持干净并最大限度地减少进行审计所需的代码。

于 2011-10-04T10:02:57.927 回答