【问题标题】:Envers with Hibernate Interceptors, onDeleteEnvers 与 Hibernate 拦截器,onDelete
【发布时间】:2011-10-04 09:08:23
【问题描述】:

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

BaseEntity{
    createdOn;
    createdBy;
    updatedOn;
    updatedBy;
}

AuditInterceptor 中,我重写了onFlushDirtyonSave 方法来根据它是实体保存还是更新来操作上述属性。保存和更新一切正常。

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

是否有解决方法,还是我遗漏了什么?

【问题讨论】:

    标签: java hibernate hibernate-envers


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 哇。当我第一次看到你的答案时,我认为这个人没有抓住重点。但事实证明,我一直都没有抓住重点。非常感谢!
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 2012-09-26
    • 2014-03-10
    • 1970-01-01
    • 2017-01-22
    • 2012-03-20
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多