java - Envers 与 Hibernate 拦截器,onDelete

标签 java hibernate hibernate-envers

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

BaseEntity{
    createdOn;
    createdBy;
    updatedOn;
    updatedBy;
}

AuditInterceptor 中,我重写了 onFlushDirtyonSave 方法来根据实体是 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/

相关文章:

java - <上下文 :component-scan> not picking up my @RequestMappings if handler mappings defined in XML

java - 如何实现GestureListener.onFling()方法

hibernate - 如何从doWork()方法获得返回

spring-boot - EnversRevisionRepositoryFactoryBean 不为 JPARepositories 创建 bean

java - 是否可以将多个 bundle 部署到使用 Hibernate Envers 的 ServiceMix?

java - 编程代码的数学符号

java - 在哪里放置 java 小程序策略文件?

java - Hibernate中如何实现触发器?

java - hibernate session.save() 插入与对象不同的值

java - Envers - 插入 @NotAudited 字段的实际值