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 引导期间,会发生以下步骤:
- ORM 收集所有实体映射,即 XML 中定义的实体映射和带注释的类。 ORM 获取所有这些表示并构建我们所说的实体的引导模型表示。
- Envers 实现了一个特殊的钩子(Hook),ORM 在准备好引导模型之后但在构建运行时模型之前立即调用该钩子(Hook),之后 ORM 将使用该钩子(Hook)。这个钩子(Hook)允许 Envers 结合带注释的 java 类来解析启动模型,并为 ORM 创建额外的实体映射,以补充 (1) 中内置的内容。这些映射当前提供给 ORM 具有附加的 Hibernate HBM XML 映射。
- 如果 Hook 生成任何其他 HBM XML 映射,Hibernate ORM 也会通过将它们转换为启动模型表示来直接集成这些映射。
- 就在 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/