我正在尝试实现一个简单的基于 Envers + 拦截器的方法来审计我的 Hibernate 实体。为此,按照典型的方法,有一个包含所有审计属性的 BaseEntity
:
BaseEntity{
createdOn;
createdBy;
updatedOn;
updatedBy;
}
在 AuditInterceptor
中,我重写了 onFlushDirty
和 onSave
方法来根据实体是 Save 还是 Update 来操作上述属性。保存和更新的一切都按预期工作。
我面临的问题是:我还需要一种方法来为删除操作操作上述属性。重写 onDelete
确实为我提供了 state[]
数组的句柄,但修改它不会反射(reflect)在 _AUD(审计)表中。简而言之:我也希望能够在审计表中审计删除操作。
是否有解决此问题的方法,还是我遗漏了什么?
最佳答案
我认为您不需要实现 onSave、onFlushDirty 方法。
您只需要实现 RevisionListener 接口(interface)。如果您遵循此处的模式,您也不需要将这些属性(createdOn 等)添加到您的实体中(除非您需要它们进行正常操作)。
参见 http://docs.jboss.org/hibernate/envers/3.6/reference/en-US/html_single/#revisionlog更多细节。在此处的示例中,他们使用 Seam 获取登录用户。
Envers 允许您将审计与您的实体分开,从而使您的正常模型保持干净并最大限度地减少进行审计所需的代码。
关于java - Envers 与 Hibernate 拦截器,onDelete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7645571/