我正在尝试实现一个简单的基于Envers +拦截器的方法来审核我的Hibernate实体。为此,根据典型方法,BaseEntity
包含所有审计属性:
BaseEntity{
createdOn;
createdBy;
updatedOn;
updatedBy;
}
在AuditInterceptor
中,我已覆盖onFlushDirty
和onSave
方法来操纵上述属性,具体取决于它是实体保存还是更新。保存和更新的一切都按预期工作。
我面临的问题是:我需要一种方法来操作Delete操作的上述属性。覆盖onDelete
确实为我提供了state[]
数组的句柄,但修改它并没有反映在_AUD(审计)表中。简而言之:我希望能够审计审计表中的删除操作。
是否有针对此的解决方法,或者我错过了什么?
答案 0 :(得分:1)
我认为你不需要实现onSave,onFlushDirty方法。
您只需要实现RevisionListener接口。如果您遵循此处的模式,则不需要将这些属性(createdOn等)添加到您的实体(除非您需要它们进行正常操作)。
有关详细信息,请参阅http://docs.jboss.org/hibernate/envers/3.6/reference/en-US/html_single/#revisionlog。在这里的示例中,他们使用Seam来获取登录用户。
Envers允许您将审核与实体分开,这样可以保持正常模型的清洁,并最大限度地减少执行审核所需的代码。