使用Hibernate Interceptor的onvers,onDelete

时间:2011-10-04 09:08:24

标签: java hibernate hibernate-envers

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

BaseEntity{
    createdOn;
    createdBy;
    updatedOn;
    updatedBy;
}

AuditInterceptor中,我已覆盖onFlushDirtyonSave方法来操纵上述属性,具体取决于它是实体保存还是更新。保存和更新的一切都按预期工作。

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

是否有针对此的解决方法,或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为你不需要实现onSave,onFlushDirty方法。

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

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

Envers允许您将审核与实体分开,这样可以保持正常模型的清洁,并最大限度地减少执行审核所需的代码。