将带有 java envers 的审计表移动到新的数据库实例

Posted

技术标签:

【中文标题】将带有 java envers 的审计表移动到新的数据库实例【英文标题】:Moving auditing table with java envers to new database instance 【发布时间】:2020-05-03 11:37:41 【问题描述】:

我有一个 mysql 数据库,模式名称为“myschema”。这个模式有表,其中一些表是 审计表。这是我对 java 项目的依赖。

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-envers</artifactId>
   <version>5.1.0.Final</version>
</dependency>

现在我想在我的当前数据库上删除这些审计表,并在一个单独的实例上重新添加它们,并带有一个新的分支。

如何做到这一点?任何建议,提前谢谢你

【问题讨论】:

【参考方案1】:

AFAIK Envers 不支持使用单独的数据库/DataSource。似乎有几种方法可以将数据获取到另一个数据库:Oracle Database Link - MySQL Equivalent?

或者,我猜你可以编写一个自定义的DataSource,根据语句将语句委托给不同的数据源。 检查是否提到了审计表,如果是,则将其发送到审计数据库。

【讨论】:

【参考方案2】:

请看Configuration Options:

org.hibernate.envers.default_schema审计表应该使用的默认模式名称

org.hibernate.envers.default_catalog应该用于审计表的默认目录名称。

您应该使用的选项取决于您的数据库。

还有一个错误是,如果您使用 Envers 开箱即用的默认修订实体映射,则在使用这些配置选项时,这些映射将无法正确映射,只有与实体映射相关的表才会正确映射。

为了将REVINFO 表正确映射到适当的架构或目录,需要将自定义修订实体映射与@Table 注释结合使用,以便显式指定架构/目录。请参阅 Revision Log 部分,该部分描述了将自定义 @RevisionEntity 带注释的实体映射与 Envers 一起使用。

【讨论】:

以上是关于将带有 java envers 的审计表移动到新的数据库实例的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Hibernate java 项目中使用“Envers”审计表

仅生成 Hibernate Envers 的审计表

Hibernate Envers 管理的审计表的主键是啥?

没有审计记录时Envers在ValidityAuditStrategy中抛出RuntimeException(表分区)

Hibernate Envers - 在启动时填写审计表

Envers:如何在 *_AUD 表中添加新列(不在 REVINFO 表中)