【问题标题】:Hibernate Event Listeners PatternsHibernate 事件监听器模式
【发布时间】:2010-09-20 21:22:06
【问题描述】:

对于 Java Web 应用程序(Struts / Spring / Hibernate),Hibernate 事件侦听器是审计日志记录的新功能。

当需要捕获一些额外的信息时,例如更新实体的用户、与预览实体属性相比更改了哪些实体属性的详细信息等,是否有可以遵循的最佳实践模式?

示例:对于用户相关信息,如果每个实体都维护更改日志属性(UpdatedBy,CreatedBy),那么实体本身可以提供信息。

为了比较哪些实体属性与数据库中实体的先前状态相比发生了变化,除了在插入之前比较所有实体属性之外,没有别的办法了吗? (这似乎是多余的措施)

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    如果您需要它专门用于审计,则无需重新发明轮子 - 看看JBoss Envers

    【讨论】:

      【解决方案2】:

      Hibernate Reference documentation 提供了一个 AuditInterceptor 作为 Hibernate Interceptor 实现的示例。

      您可以扩展 EmptyInterceptor 并覆盖方法 boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types),该方法具有对当前对象及其 id 的引用、其当前和先前状态的字段内容以及所有字段名和类型。

      使用 Spring 驱动的应用程序,您可以在配置 Hibernate SessionFactory 的 Spring 应用程序上下文中配置这些拦截器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        • 2019-11-06
        • 1970-01-01
        • 2023-03-14
        • 2014-02-21
        • 2014-07-27
        相关资源
        最近更新 更多