java - Envers Hibernate 记录表的创建/更改

标签 java mysql spring hibernate hibernate-envers

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

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

最佳答案

When does Hibernate Envers create or alter the audit tables in the schema when there is a new Entity or column that is annotated with @Audited?

从技术上讲,Hibernate Envers 根本不执行此操作,整个步骤由 Hibernate ORM 正确处理。 在 Hibernate ORM 引导期间,会发生以下步骤:

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

Is there a way to log the mysql commands that are called when there is a new audit table or column added?

有多种方法可以实现此目的,当然有些方法比其他方法更容易。

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

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

关于java - Envers Hibernate 记录表的创建/更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58867089/

相关文章:

java - 编译一个版本 - eclipse,maven

java - SMTP证书

java - 如何使用 Java 对 MongoDB 中的文档进行批量更新?

java - 我应该在什么条件下测试 get() 和 set() 方法?

mysql - 如何访问 MySQL 过程参数?

php - 从 laravel 中的表单输入将数据插入 hasone 表

PHP - 执行选择查询并循环结果

java - Spring 批处理的批处理作业

java - 如何从数据库中获取用户名和密码并传递给 Spring MVC 中的方法

java - 如何创建多模块 Spring Boot Maven 项目?