【问题标题】:Log Creation/Altering of Tables By Envers HibernateEnvers Hibernate 创建/更改表的日志
【发布时间】:2020-03-11 00:29:22
【问题描述】:

1) 当有一个用@Audited 注释的新实体或列时,Hibernate Envers 何时创建或更改架构中的审计表?

2) 有没有办法记录添加新审计表或列时调用的 mysql 命令?

【问题讨论】:

    标签: java mysql spring hibernate hibernate-envers


    【解决方案1】:

    当存在使用@Audited 注释的新实体或列时,Hibernate Envers 何时创建或更改架构中的审计表?

    从技术上讲,Hibernate Envers 根本不这样做,整个步骤都由 Hibernate ORM 处理。 在 Hibernate ORM 的引导过程中,会发生以下步骤:

    1. ORM 收集所有实体映射,包括在 XML 和带注释的类中定义的映射。 ORM 采用所有这些表示并构建我们所说的实体的引导模型表示。
    2. Envers 实现了一个特殊的钩子,在准备好引导模型之后但在构建 ORM 之后使用的运行时模型之前,ORM 会立即调用该钩子。这个钩子允许 Envers 与带注释的 java 类一起解析引导模型,并为 ORM 创建额外的实体映射,以补充 (1) 中内置的内容。这些映射目前提供给 ORM 有额外的 Hibernate HBM XML 映射。
    3. 如果挂钩产生任何额外的 HBM XML 映射,Hibernate ORM 通过将它们转换为引导模型表示来直接集成这些映射。
    4. 就在 Hibernate ORM 将此引导模型转换为运行时模型表示之前,ORM 构建映射的数据库表示。此时,在架构迁移(如果启用)期间使用数据库模型来验证/更新/创建架构以匹配数据库模型表示。

    有没有办法记录添加新审计表或列时调用的 mysql 命令?

    有几种方法可以做到这一点,当然有些比其他更容易。

    例如,您可以启用 Hibernate SQL 日志记录,使用您选择的日志记录 API 将这些条目配置为写入一个特殊的命名文件,然后将这些日志发送出去以在定义的时间间隔进行后期处理。

    您还可以考虑使用更独立的东西,例如 Debezium,它能够在事务/存档/oplog/binlog 级别监控数据库更改,并且某些连接器公开了专门存储 DDL 更改的 Kafka 主题。

    【讨论】:

    • 感谢您分解我的问题。这个答案应有尽有。非常感谢。
    • 除了 Naros 所说的之外,我们最近做了一个广泛的 blog post 讨论使用 Debezium/CDC 构建审计日志。欢迎反馈!
    【解决方案2】:
    1. Hibernate-envers 正在使用拦截器将更改插入到试听表中。它们在事务提交到数据库之前被调用。

    2. 这个问题有点不清楚,如果你说 mysql-commands,我猜你的意思是更新查询,如 CREATE TABLECREATE COLUMN。默认情况下,enver 会报告针对模式的违规行为。我可以想象 - 如果您也将试听表公开为休眠实体 - hbm2ddl 可能会创建这些 create-table 和 create-column 更新查询。

    毕竟我建议使用单一来源的真实版本概念 (SSOVOT) 和故障快速 (FF),并敢于将数据库作为单一故障点 (SPOF)。

    措辞问题

    是的,hibernate-plugin 被称为 enver,但从科学观点来看,enver(entity-version) 只是实体中标有@Version 的版本属性。正确的名称是 audition,因为您在历史上记录了数据库中表的所有更改。

    如果“更改实体表”已经有行。

    首先要说的是实体表中的每个有效负载列都可以为空,您必须在试听表中添加一个列,它默认为空值。但是如果正版表不允许在列中有空值,试听就会失败!这会导致意想不到的问题。这意味着真实列到审计列的自动复制必须是重构架构AND DATA的过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 2016-05-27
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多